Python中scrapy下載儲存圖片
導讀 | 在日常爬蟲練習中,我們爬取到的資料需要進行儲存操作,在scrapy中我們可以使用ImagesPipeline這個類來進行相關操作,這個類是scrapy已經封裝好的了,我們直接拿來用即可。 |
在使用ImagesPipeline下載圖片資料時,我們需要對其中的三個管道類方法進行重寫,其中 — get_media_request 是對圖片地址發起請求
— file path 是返回圖片名稱
— item_completed 返回item,將其返回給下一個即將被執行的管道類
那具體程式碼是什麼樣的呢,首先我們需要在pipelines.py檔案中,匯入ImagesPipeline類,然後重寫上述所說的3個方法:
from scrapy.pipelines.images import ImagesPipeline import scrapy import os class ImgsPipLine(ImagesPipeline): def get_media_requests(self, item, info): yield scrapy.Request(url = item['img_src'],meta={'item':item}) #返回圖片名稱即可 def file_path(self, request, response=None, info=None): item = request.meta['item'] print('########',item) filePath = item['img_name'] return filePath def item_completed(self, results, item, info): return item
方法定義好後,我們需要在settings.py配置檔案中進行設定,一個是指定圖片儲存的位置IMAGES_STORE = 'D:\\ImgPro',然後就是啟用“ImgsPipLine”管道,
ITEM_PIPELINES = { 'imgPro.pipelines.ImgsPipLine': 300, #300代表優先順序,數字越小優先順序越高 }
設定完成後,我們執行程式後就可以看到“D:\\ImgPro”下儲存成功的圖片。
完整程式碼如下:
spider檔案程式碼:
# -*- coding: utf-8 -*- import scrapy from imgPro.items import ImgproItem class ImgSpider(scrapy.Spider): name = 'img' allowed_domains = ['] start_urls = ['] def parse(self, response): #解析圖片地址和圖片名稱 li_list = response.xpath('//div[@class="index_img list_center"]/ul/li') for li in li_list: item = ImgproItem() item['img_src'] = '('./a[1]/img/@src').extract_first() item['img_name'] = li.xpath('./a[1]/img/@alt').extract_first() + '.jpg' # print('***********') # print(item) yield item
items.py檔案
import scrapy class ImgproItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() img_src = scrapy.Field() img_name = scrapy.Field()
pipelines.py檔案
from scrapy.pipelines.images import ImagesPipeline import scrapy import os from imgPro.settings import IMAGES_STORE as IMGS class ImgsPipLine(ImagesPipeline): def get_media_requests(self, item, info): yield scrapy.Request(url = item['img_src'],meta={'item':item}) #返回圖片名稱即可 def file_path(self, request, response=None, info=None): item = request.meta['item'] print('########',item) filePath = item['img_name'] return filePath def item_completed(self, results, item, info): return item
settings.py檔案
import random BOT_NAME = 'imgPro' SPIDER_MODULES = ['imgPro.spiders'] NEWSPIDER_MODULE = 'imgPro.spiders' IMAGES_STORE = 'D:\\ImgPro' #檔案儲存路徑 LOG_LEVEL = "WARNING" ROBOTSTXT_OBEY = False #設定user-agent USER_AGENTS_LIST = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ] USER_AGENT = random.choice(USER_AGENTS_LIST) DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', # 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", 'User-Agent':USER_AGENT } #啟動pipeline管道 ITEM_PIPELINES = { 'imgPro.pipelines.ImgsPipLine': 300, }
以上即是使用ImagesPipeline下載儲存圖片的方法,今天突生一個疑惑,爬蟲爬的好,真的是牢飯吃的飽嗎?還請各位大佬解答!
原文來自: https://www.linuxprobe.com/python-scrapy-imagespipeline.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2786069/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Python實現網頁中圖片的批次下載和水印新增儲存Python網頁
- 前端js儲存頁面為圖片下載到本地前端JS
- Scrapy框架之利用ImagesPipeline下載圖片框架
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- 儲存圖片
- Python 下載圖片Python
- Activiti 儲存圖片
- Delphi儲存網頁中的圖片網頁
- 本地HTML中圖片下載HTML
- js實現canvas儲存圖片為png格式並下載到本地JSCanvas
- python自動下載圖片Python
- 圖片叢集分散式儲存和負載均衡分散式負載
- asp.net儲存圖片ASP.NET
- 儲存圖片到SD卡SD卡
- Matlab GUI儲存圖片MatlabGUI
- 原生JS實現base64圖片下載-圖片儲存到本地JS
- scrapy下載圖片報[scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt:錯誤ORB
- 【拾金者】用Sql Server儲存上載圖片字型SQLServer
- 使用Scrapy爬取圖片入庫,並儲存在本地
- scrapy 採集常用的Pipeline(輸出檔案、圖片下載)
- 在SQL Server中儲存和輸出圖片 (轉)SQLServer
- Python學習筆記 - 下載圖片Python筆記
- 諮詢數學公式儲存到mysql中 非圖片形式儲存公式MySql
- 將網站儲存成圖片網站
- C# 截圖並儲存為圖片C#
- 在 Python 中儲存和載入機器學習模型Python機器學習模型
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟
- scrapy框架持久化儲存框架持久化
- Android將view儲存為圖片並放在相簿中AndroidView
- SQL Server中對圖片進行儲存和輸出SQLServer
- 移動端長按儲存、取消長按儲存圖片
- Python 萌新 - 實現 Markdown 圖片下載器Python
- Python爬蟲之煎蛋網圖片下載Python爬蟲
- Python爬蟲 搜尋並下載圖片Python爬蟲
- iOS實現點選圖片放大&長按儲存圖片iOS
- iOS視訊、圖片下載加密 解密以及儲存到本地iOS加密解密
- 圖片儲存-從七牛到 GithubGithub
- 淘寶圖片儲存系統架構架構