【愚公系列】《Python網絡爬蟲從入門到精通》054-Scrapy 文件下載

🌟【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】🌟

📣開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主!

👉 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"挖山不止"的毅力為開發者們搬開知識道路上的重重阻礙!

💎【行業認證·權威頭銜】
? 華為云天團核心成員:特約編輯/云享專家/開發者專家/產品云測專家
? 開發者社區全滿貫:CSDN博客&商業化雙料專家/阿里云簽約作者/騰訊云內容共創官/掘金&亞馬遜&51CTO頂級博主
? 技術生態共建先鋒:橫跨鴻蒙、云計算、AI等前沿領域的技術布道者

🏆【榮譽殿堂】
🎖 連續三年蟬聯"華為云十佳博主"(2022-2024)
🎖 雙冠加冕CSDN"年度博客之星TOP2"(2022&2023)
🎖 十余個技術社區年度杰出貢獻獎得主

📚【知識寶庫】
覆蓋全棧技術矩陣:
? 編程語言:.NET/Java/Python/Go/Node…
? 移動生態:HarmonyOS/iOS/Android/小程序
? 前沿領域:物聯網/網絡安全/大數據/AI/元宇宙
? 游戲開發:Unity3D引擎深度解析
每日更新硬核教程+實戰案例,助你打通技術任督二脈!

💌【特別邀請】
正在構建技術人脈圈的你:
👍 如果這篇推文讓你收獲滿滿,點擊"在看"傳遞技術火炬
💬 在評論區留下你最想學習的技術方向
? 點擊"收藏"建立你的私人知識庫
🔔 關注公眾號獲取獨家技術內參
?與其仰望大神,不如成為大神!關注"愚公搬代碼",讓堅持的力量帶你穿越技術迷霧,見證從量變到質變的奇跡!? |

文章目錄

  • 🚀前言
  • 🚀一、Scrapy 文件下載
    • 🔎1.下載京東外設商品圖片
      • 🦋1.1 創建 Scrapy 項目
      • 🦋1.2 編寫爬蟲
      • 🦋1.3 配置 Pipeline
      • 🦋1.4 在 settings.py 中激活 Pipeline
      • 🦋1.5 啟動爬蟲


🚀前言

在前面的章節中,我們已經系統地學習了 Scrapy 框架的基礎應用和一些進階技巧,本篇文章將重點講解如何使用 Scrapy 實現 文件下載,讓你能夠抓取網頁中的各類文件,如圖片、PDF、音視頻等。

在爬蟲開發中,文件下載是一個非常常見的需求,尤其是在進行圖片爬取、資料抓取等項目時,我們需要考慮如何高效地下載和存儲文件。Scrapy 提供了非常強大的文件下載支持,能夠幫助我們輕松應對這些任務。

在本篇文章中,我們將探討:

  1. Scrapy 文件下載的基本原理:了解 Scrapy 如何處理文件下載,掌握文件下載的基本流程。
  2. 如何配置文件下載功能:通過配置 FILES_STORE 等參數,實現文件的下載和存儲。
  3. 下載不同類型的文件:不僅是圖片,還可以是各種類型的文件,如PDF、音頻、視頻等,如何處理不同格式的文件。
  4. 文件下載的優化與擴展:如何通過 Scrapy 中的中間件和其他組件對文件下載進行優化,以提升下載效率和穩定性。

通過本篇文章的學習,你將能夠熟練掌握 Scrapy 文件下載的實現方式,為你的爬蟲項目增添更多實用功能。如果你正在處理文件抓取任務,或者希望了解如何更高效地下載和存儲文件,那么本篇教程將為你提供全面的解決方案。

🚀一、Scrapy 文件下載

Scrapy 提供了專門處理文件下載的 Pipeline(項目管道),包括 Files Pipeline(文件管道)和 Images Pipeline(圖像管道)。兩者的使用方式相同,區別在于 Images Pipeline 還支持將所有下載的圖片格式轉換為 JPEG/RGB 格式,并且可以設置縮略圖。

以下以繼承 ImagesPipeline 類為例,重寫三個方法:

  1. file_path():該方法用于返回文件下載的路徑,request 參數是當前下載對應的 request 對象。

  2. get_media_requests():該方法的第一個參數是 item 對象,可以通過 item 獲取 URL,并將 URL 加入請求隊列進行下載。

  3. item_completed():當單個 item 下載完成后調用,用于處理下載失敗的圖片。results 參數包含該 item 對應的下載結果,包括成功或失敗的信息。

🔎1.下載京東外設商品圖片

🦋1.1 創建 Scrapy 項目

在命令行窗口中,通過以下命令創建一個名為 imagesDemo 的 Scrapy 項目:

scrapy startproject imagesDemo

接著,在該項目的 spiders 文件夾內創建 imagesSpider.py 爬蟲文件,并在 items.py 文件中定義存儲商品名稱和圖片地址的 Field() 對象:

import scrapyclass ImagesDemoItem(scrapy.Item):wareName = scrapy.Field()  # 存儲商品名稱imgPath = scrapy.Field()  # 存儲商品圖片地址

🦋1.2 編寫爬蟲

imagesSpider.py 文件中,首先導入 json 模塊,并重寫 start_requests() 方法來獲取 JSON 數據。然后在 parse() 方法中提取商品名稱和圖片地址。


# -*- coding: utf-8 -*-
import scrapy       # 導入scrapy模塊
import json         # 導入json模塊
# 導入ImagesdemoItem類
from imagesDemo.items import ImagesdemoItem
class ImgesspiderSpider(scrapy.Spider):name = 'imgesSpider'                # 爬蟲名稱allowed_domains = ['ch.jd.com']     # 域名列表start_urls = ['http://ch.jd.com/']  # 網絡請求初始列表def start_requests(self):url = 'http://ch.jd.com/hotsale2?cateid=686'  # 獲取json信息的請求地址yield scrapy.Request(url, self.parse)         # 發送網絡請求def parse(self, response):data = json.loads(response.text)  # 將返回的json信息轉換為字典products = data['products']  # 獲取所有數據信息for image in products:  # 循環遍歷信息item = ImagesdemoItem()  # 創建item對象item['wareName'] = image.get('wareName').replace('/','')  # 存儲商品名稱# 存儲商品對應的圖片地址item['imgPath'] = 'http://img12.360buyimg.com/n1/s320x320_' + image.get('imgPath')yield item# 導入CrawlerProcess類
from scrapy.crawler import CrawlerProcess
# 導入獲取項目設置信息
from scrapy.utils.project import get_project_settings# 程序入口
if __name__ == '__main__':# 創建CrawlerProcess類對象并傳入項目設置信息參數process = CrawlerProcess(get_project_settings())# 設置需要啟動的爬蟲名稱process.crawl('imgesSpider')# 啟動爬蟲process.start()

🦋1.3 配置 Pipeline

pipelines.py 文件中,導入 ImagesPipeline 類,繼承該類并重寫 file_path()get_media_requests() 方法。

from scrapy.pipelines.images import ImagesPipeline   # 導入ImagesPipeline類
import scrapy                                         # 導入scrapy
class ImagesdemoPipeline(ImagesPipeline):             # 繼承ImagesPipeline類# 設置文件保存的名稱def file_path(self, request, response=None, info=None):file_name = request.meta['name']+'.jpg'  # 將商品名稱設置為圖片名稱return file_name                         # 返回文件名稱# 發送獲取圖片的網絡請求def get_media_requests(self, item, info):# 發送網絡請求并傳遞商品名稱yield scrapy.Request(item['imgPath'],meta={'name':item['wareName']})# def process_item(self, item, spider):#     return item

🦋1.4 在 settings.py 中激活 Pipeline

settings.py 文件中激活 ITEM_PIPELINES 配置,并指定圖片下載后的保存路徑。

ITEM_PIPELINES = {'imagesDemo.pipelines.ImagesDemoPipeline': 300,
}IMAGES_STORE = './images'  # 圖片保存的文件夾路徑

🦋1.5 啟動爬蟲

啟動 imagesSpider 爬蟲,下載完成后,打開項目結構中的 images 文件夾,可以查看下載的商品圖片。
在這里插入圖片描述

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

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

相關文章

2025最新︱中國信通院靜態應用程序安全測試(SAST)工具能力評估,懸鏡安全靈脈AI通過評估!

背景 研發運營安全(DevSecOps)從研發運營(DevOps)的概念延伸和演變而來,其核心理念是將安全貫穿從開發到運營的軟件開發生命周期的每一個環節,在每個階段自動實施安全措施,從而實現快速開發交付…

辛格迪客戶案例 | 浙江高跖醫藥委托生產質量管理協同(OWL MAH)項目

一、案例概述 浙江高跖醫藥科技股份有限公司是一家集“研、產、銷”為一體的專業化藥品持證企業。高跖醫藥自成立之初就建立并運行著一套相對完善的質量管理體系,涵蓋了藥品的研發、生產監管及銷售。高跖醫藥于2022年選擇實施了辛格迪的“委托生產質量管理協同解決…

【NLP 65、實踐 ? 基于Agent優化文章】

羈絆由我而起,痛苦也由我承擔 —— 25.4.18 一、?【核心函數】定義大模型調用函數 call_large_model prompt:用戶傳入的提示詞(如 “請分析這篇作文的主題”),指導模型執行任務 client:Zhipu…

【鋰電池SOH估計】BP神經網絡鋰電池健康狀態估計,鋰電池SOH估計(Matlab完整源碼和數據)

目錄 效果一覽程序獲取程序內容研究內容基于BP神經網絡的鋰電池健康狀態估計研究摘要關鍵詞1. 引言1.1 研究背景1.2 研究意義1.3 研究目標2. 文獻綜述2.1 鋰電池SOH估計理論基礎2.2 傳統SOH估計方法2.3 基于BP神經網絡的SOH估計研究進展2.4 研究空白與創新點3. BP神經網絡原理3…

2025第十六屆藍橋杯python B組滿分題解(詳細)

目錄 前言 A: 攻擊次數 解題思路: 代碼: B: 最長字符串 解題思路: 代碼: C: LQ圖形 解題思路: 代碼: D: 最多次數 解題思路: 代碼: E: A * B Problem 解題思路&…

第十二節:原理深挖-React Fiber架構核心思想

鏈表結構、時間切片(Time Slicing) 優先級調度實現(如用戶輸入>網絡請求) React Fiber架構深度解析:從鏈表到優先級調度的革命性升級 一、Fiber架構核心設計思想 React Fiber是React 16的底層協調算法重構&#x…

你學會了些什么211201?--http基礎知識

概念 HTTP–Hyper Text Transfer Protocol,超文本傳輸協議;是一種建立在TCP上的無狀態連接(短連接)。 整個基本的工作流程是:客戶端發送一個HTTP請求(Request ),這個請求說明了客戶端…

MCU開發學習記錄8 - 基本定時器學習與實踐(HAL庫) - 定時器DMA循環模式修改ARR值、定時器中斷方式修改ARR值 - STM32CubeMX

名詞解釋: TRGO:Trigger Out General Purpose Output ARR:Auto-reload PSC:Prescaler CNT:Counter EGR:event generation register 本文將介紹基本定時器的概念、相關函數以及STM32CubeMX生成定時器的配置…

考研系列-計算機網絡沖刺考點匯總(上)

寫在前面 本文將總結王道408考研課程的計算機網絡沖刺考點的第一章到第三章內容(計算機網絡體系結構、物理層、數據鏈路層)。【圖片較多,加載需要時間,可以提前打開加載~~】 第一章、計算機網絡體系結構 注意:PCI(頭部…

設計模式每日硬核訓練 Day 14:組合模式(Composite Pattern)完整講解與實戰應用

🔄 回顧 Day 13:橋接模式小結 在 Day 13 中,我們學習了橋接模式(Bridge Pattern): 用于將“抽象”與“實現”分離,適用于雙維度變化場景(如圖形類型 渲染方式)。它強調…

訊聯桌面TV版apk下載-訊聯桌面安卓電視版免費下載安裝教程

在智能電視的使用過程中,一款好用的桌面應用能極大提升我們的使用體驗。訊聯桌面 TV 版就是這樣一款備受關注的應用,它可以讓安卓電視擁有更個性化、便捷的操作界面。今天,就為大家詳細介紹訊聯桌面 TV 版 apk 的免費下載安裝教程。 一、下載…

Nginx知識點

Nginx發展歷史 Nginx 是由俄羅斯程序員 Igor Sysoev 開發的高性能開源 Web 服務器、反向代理服務器和負載均衡器 ,其歷史如下: 起源與早期開發(2002 - 2004 年) 2002 年,當時 Igor Sysoev 在為俄羅斯門戶網站 Rambl…

uview1.0 tabs組件放到u-popup中在微信小程序中滑塊樣式錯亂

解決思路 重新計算布局信息&#xff1a;在彈窗顯示后重新調用 init 方法來計算組件的布局信息。使用 nextTick&#xff1a;保證在視圖更新之后再進行布局信息的計算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…

騰訊一面-軟件開發實習-PC客戶端開發方向

1.自我介紹就不多贅述了 2. 請介紹一下你的項目經歷 - 介紹了專輯鑒賞項目&#xff0c;前端使用html語言編寫&#xff0c;后端基于http協議使用C語言進行網頁開發。此外&#xff0c;還提及項目中涉及處理多線程問題以及做過內存池管理項目。 3. 項目中HTTP協議是使用庫實現的…

[數據可視化] Datagear使用心得:從數據整備到可視化聯動實踐

Datagear 是一款功能強大的數據可視化與報表工具&#xff0c;在日常數據分析與展示過程中&#xff0c;能有效幫助用戶構建交互式報表與面板。本文結合實際使用場景&#xff0c;總結了在 Datagear 平臺上關于元數據整備、Board 面板設計、圖表嵌入等方面的使用經驗&#xff0c;供…

【音視頻】MP4解封裝

一、概述 實現了讀取mp4文件&#xff0c;提取出h264和aac文件&#xff0c;可以直接播放 二、實現過程 準備文件 在build路徑下添加mp4文件 同時&#xff0c;添加main函數參數&#xff0c;表示輸入文件和輸出文件 打開文件 打開輸入文件&#xff0c;初始化格式上下文 char…

idea2024.1雙擊快捷方式打不開

idea2024.1突然雙擊快捷方式打不開&#xff0c;使用管理員運行也打不開 在安裝的idea路徑下的bin目錄下雙擊打開idea.bat文件&#xff0c;要是打不開使用txt格式打開&#xff0c;打開后在最后一行加上pause&#xff0c;之后保存。 看看報錯信息是不是有一個initializedExcept…

【錯誤記錄】Windows 命令行程序循環暫停問題分析 ( 設置 “ 命令記錄 “ 選項 | 啟用 “ 丟棄舊的副本 “ 選項 | 將日志重定向到文件 )

文章目錄 一、報錯信息二、問題分析1、Windows 命令行的緩沖區機制2、命令記錄設置 三、解決方案1、設置 " 命令記錄 " 選項2、將日志重定向到文件 一、報錯信息 Java 程序中 , 設置 無限循環 , 每次循環 休眠 10 秒后 , 再執行程序邏輯 , 在命令行中打印日志信息 ; …

STM32H5開發陀螺儀LSM6DSV16X(1)----輪詢獲取陀螺儀數據

STM32H5開發陀螺儀LSM6DSV16X.1--輪詢獲取陀螺儀數據 概述視頻教學樣品申請源碼下載硬件準備參考程序通信模式管腳定義IIC通信模式速率新建工程工程模板保存工程路徑芯片配置工程模板選擇時鐘設置UART配置UART屬性配置設置e2studio堆棧e2studio的重定向printf設置R_SCI_UART_Op…

Android端使用無障礙服務實現遠程、自動刷短視頻

最近在做一個基于無障礙自動刷短視頻的APP&#xff0c;需要支持用任意藍牙遙控器遠程控制&#xff0c; 把無障礙服務流程大致研究了一下&#xff0c;從下面3個部分做一下小結。 1、需要可調整自動上滑距離和速度以適配不同的屏幕和應用 智能適配99%機型&#xff0c;滑動參數可…