Python 圖片爬取入門:從手動下載到自動批量獲取

前言

????????想批量下載網頁圖片卻嫌手動保存太麻煩?本文用 Python 帶你實現自動爬取,從分析網站到代碼運行,步驟清晰,新手也能快速上手,輕松搞定圖片批量獲取。

1.安裝模塊

????????在開始爬取圖片前,我們需要準備好工具和環境。這就像蓋房子前要準備好磚瓦和工具一樣,合適的環境能讓后續操作更順暢。

1.1環境安裝

《Python開發環境終極指南:從Conda環境配置到VSCode、PyCharm、Jupyter深度優化》_conda系統環境配置-CSDN博客文章瀏覽閱讀1.4k次,點贊47次,收藏31次。Jupyter Notebook允許用戶在一個文檔中結合代碼、文字、數學公式和可視化圖表,是教學、實驗記錄和可重復研究的理想工具。Jupyter Notebook是一種互動式的網頁應用程序,讓你在一個文檔中寫代碼、運行代碼、添加注釋和插入圖表。【菜單】---【設置】--【項目:你的項目目錄】--【python解釋器】--【添加解釋器】--【添加本地解釋器】不建議使用類似C:\Users\15740\\.conda\envs**這樣的默認路徑去創建虛擬環境。然后就可以創建python文件、寫代碼、運行即可~_conda系統環境配置 https://blog.csdn.net/xw3373409564/article/details/149201204?fromshare=blogdetail&sharetype=blogdetail&sharerId=149201204&sharerefer=PC&sharesource=xw3373409564&sharefrom=from_link這里建議使用Pycharm

1.2第三方模塊與模塊的調用

Python 模塊化編程全解析:模塊、包與第三方庫管理指南-CSDN博客文章瀏覽閱讀1.1k次,點贊30次,收藏22次。學好模塊和包,是從"寫腳本"到"開發項目"的關鍵一步。下次寫代碼時,試試把常用功能拆成模塊——你會發現代碼變得清爽又好維護! https://blog.csdn.net/xw3373409564/article/details/149452387?fromshare=blogdetail&sharetype=blogdetail&sharerId=149452387&sharerefer=PC&sharesource=xw3373409564&sharefrom=from_link

2.分析網站

????????爬取圖片的關鍵是找到圖片的真實地址。就像找寶藏需要先看地圖,我們需要用瀏覽器的 “開發者工具” 分析網站結構,找到圖片的來源。

瀏覽器建議使用谷歌

2.1打開網頁

打開一個包含圖片的網頁,例如:

2.2進入檢查(或開發者選項)

  • 右鍵網頁空白處,選擇 “檢查”(或按 F12 快捷鍵),打開開發者工具。
  • 這個工具就像 “透視鏡”,能看到網頁背后的代碼和網絡請求。

2.3Elements

進入如如下頁面,Elements是網頁的全部內容,

2.4network

  1. 切換到 Network 面板:這里記錄了網頁加載時的所有網絡請求(如圖片、文字、腳本等)。
  2. 選擇 Fetch/XHR:圖片數據通常通過 “異步請求” 加載,這里能過濾出我們需要的動態數據請求。
  3. 刷新網頁或滑動加載:滑動網頁時,新的圖片會被加載,Network 面板會出現新的請求記錄。

2.5Fetch/XHR

  1. 查看請求的 Preview:在 Fetch/XHR 列表中,點擊一個請求,切換到 “Preview” 標簽,這里能看到請求返回的數據(通常是 JSON 格式)。
  2. 尋找圖片地址字段:在數據中逐層查找,會發現一個images列表,里面的thumburl字段就是圖片的真實地址(試試復制這個地址到瀏覽器,能直接打開圖片哦~)。
  3. 記錄請求 URL 和參數:每個請求都有一個 URL(如https://image.baidu.com/search/acjson?...),里面的word參數是搜索關鍵詞(如 “劉亦菲”),pn是分頁參數(控制第幾頁),rn是每頁圖片數量 —— 這些參數能幫我們控制爬取的內容和數量。

選擇Fetch/XHR,里面放的是各種請求

2.5.1Header

在Header中往下滑,在request headers中找到?user-agent

?????????user-agent;用戶代理”,是一個在客戶端(如瀏覽器、APP、爬蟲程序等)向服務器發送請求時,包含在 HTTP 請求頭中的字符串。它的核心作用是向服務器 “說明” 自己的身份信息,讓服務器了解請求來自哪種客戶端、操作系統、設備類型等,從而返回適配的內容。

????????user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36?

2.5.2 Payload

2.5.3Preview

點擊Preview?里面放的是我們請求的數據,我們需要在里面找到圖片地址

????????可以看出images是一個列表list?

2.5.3.1在images中找到圖片地址

例如jumpUrl

結果如下

?繼續往下找

結果如下?

然后換一個 繼續訪問看是否一致

結果如下,很顯然thumburl就是我們要找的地址 ,同時從這里也可以看出每個請求里有30張圖片

?2.5.4獲取請求的url地址

?這樣我們就獲得了一個請求地址(訪問不同地址不同):

https://image.baidu.com/search/acjson?tn=resultjson_com&word=%E5%88%98%E4%BA%A6%E8%8F%B2&ie=utf-8&fp=result&fr=&ala=0&applid=11719931000699796610&pn=60&rn=30&nojc=0&gsm=3c&newReq=1

3.編寫爬蟲代碼:從請求到下載圖片

????????我這里使用pycharm

3.1打開pycharm

?3.2設置地址變量(url)

????????設置一個變量來保存url地址,這里的地址應該是動態的,因為圖片的地址不一樣,后續會處理

3.2設置請求頭:模擬瀏覽器

  • 請求頭的作用User-Agent告訴網站 “我是瀏覽器”,避免被識別為爬蟲而拒絕請求。

?3.3使用request模塊發送請求

3.3.1檢查是否 請求成功

3.3.2看看是否抓取到信息?

3.3.3然后查看文件類型?

?3.3.4將其轉換為json

? ?json.loads()?是 Python 標準庫?json?模塊中的一個重要函數,用于將 JSON 格式的字符串轉換為 Python 數據類型(如字典、列表、字符串、數字等),實現 JSON 數據的 “反序列化”,方便我們提取圖片地址。。

3.4獲取圖片信息

????????根據我們分析網頁時(在分析網頁模塊2.5.3Preview?里面放的是我們請求的數據,我們需要一層一層的在里面找到圖片地址)url地址get( )? 方法獲取

?3.4.1打印thumburl地址

?我們拿到圖片地址就是想把它下載到本地

3.5下載圖片

????????創建一個用于存放圖片的文件夾這里我創建的是images????????

3.5.1使用request發起請求get(圖片地址)

3.5.2?下載

3.5.2.1查看是否獲取到圖片數據
  • 二進制保存:圖片是二進制文件,所以用"wb"模式(寫入二進制)打開文件。

顯然獲取數據成功?

3.5.2.2保存圖片數據

?注意:這里的地址D:\hqyj\py\周末自習\images要用? \ \,在python中 \ 是轉義字符

3.5.3運行

?到這里我們就完成了簡單的下載功能

4.代碼優化:讓爬蟲更實用

4.1獲取當前目錄地址

結果如下:?

????????D:\hqyj\py\周末自習
????????D:\hqyj\py\周末自習\images

4.1.1不同方法

場景推薦方法原因
將圖片保存到腳本所在目錄os.path.dirname(__file__)無論腳本從何處運行,都能準確定位到腳本自身所在的目錄。
將圖片保存到當前工作目錄os.getcwd()適用于需要與用戶當前操作目錄保持一致的場景(如命令行工具)。

4.1.2檢測

4.2 優化下載數量

????????從(2.5.2?點擊Payload)中我們可以看出pn時為了設置每頁起始值,而rn是每頁圖片張數,通過修改 URL 中的pn參數(分頁起始值),實現多頁爬取:如下:

注意,為了方便操作這里使用了換行符 \

由于這里做了更改,保存圖片是的文件名也需更改?

然后執行看是否成功

顯然是成功的?

4.3支持多關鍵詞爬取,同時下載不同的內容

(2.5.2?點擊Payload)可以發面word是用來存儲我們搜索的關鍵詞

我們可以用一個列表存儲這些關鍵詞來映射,動態獲取內容

同樣的我們需要對文件保存做出修改

運行看是否成功

?

?顯然這是成功的兩頁,每頁3張

4.4增加錯誤處理

???????用try-except捕獲錯誤,避免因個別圖片地址無效導致程序崩潰:

5.源代碼

import os
import requests
import json# 關鍵詞映射
keyword = {'liuyifei': '劉亦菲','liushishi': '劉詩詩'
}
# 本地目錄獲取,當前文件所在目錄
CURRENT_DIR = os.path.dirname(__file__)
PAGES_NUM = 2
if __name__ == '__main__':for key, word in keyword.items():# 下載圖片到本地目錄folder = os.path.join(CURRENT_DIR, key)if not os.path.exists(folder):os.makedirs(folder)# 遍歷的方式爬取多頁for page in range(PAGES_NUM):url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&word={word}&ie=\utf-8&fp=result&fr=&ala=0&applid=11719931000699796610&pn={page*3}&rn=3&nojc=0&gsm=3c&newReq=1'# 設置請求頭:模擬瀏覽器headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'}# 使用request模塊發送請求response = requests.get(url, headers=headers)images = json.loads(response.text).get('data').get('images')# 獲取到所有的我要加載到本地的圖片地址for i, img_info in enumerate(images):try:imgUrl = img_info.get('thumburl')if not imgUrl:continue  # 跳過無地址圖片# 下載圖片到本地# request發起請求,get(圖片地址)img = requests.get(imgUrl)with open(os.path.join(folder, f'{word}{i+3*page}.jpg'), mode='wb') as f:f.write(img.content)print(f'第{page}頁:{word}{i+page*3}.jpg 保存成功....')except Exception as e:print(f'第{page}頁:{word}{i+page*3}.jpg 保存錯誤:{e}')

6總結

核心步驟回顧

  1. 分析網站:用開發者工具找到圖片的請求 URL 和數據結構(關鍵是找到圖片真實地址)。
  2. 發送請求:用requests庫模擬瀏覽器發送請求,獲取數據。
  3. 提取信息:從返回的 JSON 數據中提取圖片地址。
  4. 保存數據:將圖片以二進制形式保存到本地文件夾。
  5. 優化擴展:支持多頁、多關鍵詞爬取,增加錯誤處理。

注意事項

  • 尊重網站規則:查看網站的robots.txt(如https://image.baidu.com/robots.txt),遵守爬取限制,不要頻繁請求(可以加time.sleep()控制間隔)。
  • 反爬應對:設置合理的請求頭(User-Agent),避免被識別為爬蟲;不要一次性爬取過多數據。
  • 合法性:確保爬取的內容用于學習,不侵犯版權或用于商業用途

????????通過這篇教程,你已經掌握了 Python 爬取網頁圖片的基本方法。爬蟲的核心是 “分析網站→模擬請求→提取數據”,多練習不同的網站(如豆瓣圖片、壁紙網站),你會越來越熟練!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89598.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89598.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89598.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

aspect-ratio: 1 / 1樣式在部分手機瀏覽器中失效的問題怎么解決?

最近在uniapp開發時又遇到了安卓手機不兼容問題&#xff0c;ios系統無影響。開發背景&#xff1a;小編想通過網格布局來實現答題卡的布局&#xff0c;實現五列多行的形式。代碼片段&#xff1a;<view class"question-grid"><viewv-for"(question, inde…

RecyclerView與ListView深度對比分析

1. 使用流程對比ListView: 布局XML&#xff1a; 在布局文件中放置 <ListView> 控件&#xff0c;指定 id (如 android:id"id/listView")。數據適配器 (Adapter)&#xff1a; 繼承 BaseAdapter 或 ArrayAdapter / CursorAdapter / SimpleAdapter。 重寫 getCount…

deepseekAI對接大模型的網頁PHP源碼帶管理后臺(可實現上傳分析文件)

前端后端都已進行優化&#xff0c;新增可上傳文件功能&#xff08;拖拽進去也可以&#xff09;&#xff0c;后端進行風格主題設置&#xff0c;優化數據結構&#xff01;依舊測試網站&#xff1a;iEPMS我的工具箱&#xff0c;你的智慧助手&#xff01;還是那句話兄弟們輕點搞我的…

NJU 凸優化導論(9) 對偶(II)KKT條件+變形重構

https://www.lamda.nju.edu.cn/chengq/optfall24/slides/Lecture_9.pdf 目錄 關于對偶的一些解釋 1. Max-min characterization 最大最小準則 2. Saddle-point Interpretation 鞍點解釋 3. Game interpretation 博弈論里的對偶 Optimality Conditions 最優條件 1. Certi…

Vue Swiper組件

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue Swiper組件實現筆記 目錄 Swiper組件 下載swiper 創建swiper組件 保存時修復 編寫swiper內容 引入swiper 使用swiper Swiper子組件 創建Swiper列表組件 使用子組件 增加生命周期 增加圖片顯示 加載數據 渲染…

Linux:lvs集群技術

一.集群和分布式1.1 集群集群是為了解決某個特定問題將多臺計算機組合起來形成的單個系統。即當單獨一臺主機無法承載現有的用戶請求量&#xff1b;或者一臺主機因為單一故障導致業務中斷的時候&#xff0c;就可以增加服務主機數&#xff0c;這些主機在一起提供服務&#xff0c…

【管理】持續交付2.0:業務引領的DevOps-精要增訂本,讀書筆記(理論模型,技術架構,業務價值)

【管理】持續交付2.0&#xff1a;業務引領的DevOps-精要增訂本&#xff0c;讀書筆記&#xff08;理論模型&#xff0c;技術架構&#xff0c;業務價值&#xff09; 文章目錄1、持續交付的理論模型&#xff08;第1-3章&#xff09;1.1 結構圖1.2 持續交付的演進1.3 雙環模型理論體…

Wilcox檢驗的星星怎么規定的?

在 R 里&#xff0c;常見的把 p 值映射為“星號”標記&#xff08;顯著性水平&#xff09;的規則通常是&#xff1a;p 值范圍標記p ≤ 0.0001“****”0.0001 < p ≤ 0.001“***”0.001 < p ≤ 0.01“**”0.01 < p ≤ 0.05“*”0.05 < p ≤ 0.1“.”p > 0.1…

https與DNS的運行流程

HTTPS流程&#xff1a;HTTPS核心:加了TLS層&#xff0c;加密傳輸身份認證TLS:信息加密、校驗機制、身份證書TLS&#xff08;Transport Layer Security&#xff09;握手是建立安全通信通道的關鍵過程&#xff0c;發生在客戶端&#xff08;如瀏覽器&#xff09;和服務器之間。其主…

板子 5.29--7.19

板子 5.29–7.19 目錄 1. 樹狀數組 2. KMP 3. 矩陣快速冪 4. 數位DP 5. 狀壓枚舉子集 6. 快速冪&#xff08;新版 7. priority_queue 8. dijkstra 9. 單調棧 10. debug內容 1. 樹狀數組 // 樹狀數組 快速求前綴和 / 前綴最大值 // 維護位置數量(離散化)...// (區間加 區間求和…

min-max容斥學習筆記

最近報了航電的春季賽&#xff0c;在一道題目里面遇到了做法&#xff0c;感覺挺有意思。 考慮一個&#xff08;多重&#xff09;集合S{ai}S\{a_i\}S{ai?}&#xff0c;有如下的等式成立 min?ai∈S(ai)∑T?S,T≠?(?1)∣T∣?1max?ai∈T(ai)\min_{a_i\in S}(a_i)\sum_{T\sub…

使用帆軟制作項目

https://zhuanlan.zhihu.com/p/23429318335 項目背景 為加快大數據體系建設&#xff0c;穩步推進數字化轉型戰略&#xff0c;規范數據架構體系和數據治理體系&#xff0c;運用大數據推進全行數字化轉型建設&#xff0c;為業務發展提供創新動力&#xff0c;目標是利用金融科技和…

論C/C++的條件編譯#if、#ifdef、#ifndef、#undef

我們以實例來演示&#xff1a; ------------------------------------------實驗①------------------------------------------ 子函數&#xff1a;主函數&#xff1a;當定義了COMMENT_FLAG該宏&#xff0c;且其為0&#xff0c;則運行結果如下&#xff1a;只執行了sub_func_1函…

21、鴻蒙Harmony Next開發:組件導航(Navigation)

目錄 設置頁面顯示模式 設置標題欄模式 設置菜單欄 設置工具欄 路由操作 頁面跳轉 頁面返回 頁面替換 頁面刪除 移動頁面 參數獲取 路由攔截 單例跳轉 子頁面 頁面顯示類型 頁面生命周期 頁面監聽和查詢 頁面轉場 關閉轉場 自定義轉場 共享元素轉場 跨包…

“外賣大戰”正在改變國內“大零售”

出品 | 何璽排版 | 葉媛7月18日&#xff0c;市場監管總局約談美團、餓了么、京東三家外賣平臺&#xff0c;要求“理性競爭、規范促銷”&#xff0c;劍指近期愈演愈烈的“0元購”“0.1秒殺”等外賣補貼亂象。但約談之后&#xff0c;平臺們是真整改&#xff0c;還是玩話術&#x…

當CAN握手EtherCAT:視覺檢測系統的“雙芯合璧”時代來了

在汽車制造的高速生產線上&#xff0c;設備間的“語言不通”曾是工程師們的頭疼事&#xff1a;CAN總線像踏實的老司機&#xff0c;穩扎穩打傳輸傳感器數據&#xff1b;而EtherCAT網關則是追求極致速度的“閃電俠”&#xff0c;主導著實時控制的重任。當視覺檢測系統需要同時對接…

【C語言】動態內存管理全解析:malloc、calloc、realloc與free的正確使用

C語言學習 動態內存分配 友情鏈接&#xff1a;C語言專欄 文章目錄C語言學習前言&#xff1a;一、為什么要有動態內存分配二、malloc和free2.1 malloc2.2 free三、calloc和realloc3.1 calloc3.2 realloc總結附錄上文鏈接下文鏈接專欄前言&#xff1a; 在C語言編程中&#xff0…

基于Arduino智能家居環境監測系統—以光照強度檢測修改

2 相關技術與理論 2.1 Arduino 技術 Arduino 是一款廣受歡迎的開源電子原型平臺&#xff0c;由硬件和軟件組成&#xff0c;為開發者提供了便捷且低成本的解決方案&#xff0c;尤其適用于快速搭建交互式電子項目&#xff0c;在本智能家居環境監測系統中擔當核心角色。? 硬件方…

前端上傳 pdf 文件 ,前端自己解析出來 生成界面 然后支持編輯

要在前端解析 PDF 文件并生成可編輯界面&#xff0c;我們可以使用 PDF.js 庫來解析 PDF 內容&#xff0c;然后將其轉換為可編輯的 HTML 元素。 主要特點和工作原理如下&#xff1a; PDF 解析&#xff1a; 使用 Mozilla 的 PDF.js 庫解析 PDF 文件內容&#xff0c;提取文本信息。…

Linux“一切皆文件“設計哲學 與 Linux文件抽象層:struct file與file_operations的架構解析

在Linux系統中&#xff0c;“一切皆文件”&#xff08;Everything is a file&#xff09;是一個核心設計哲學&#xff0c;它抽象了系統資源的訪問方式&#xff0c;使得幾乎所有硬件設備、進程、網絡連接等都可以通過統一的文件接口&#xff08;如open()、read()、write()、clos…