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網頁
- Python 下載圖片Python
- 前端js儲存頁面為圖片下載到本地前端JS
- 儲存圖片
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- python自動下載圖片Python
- js實現canvas儲存圖片為png格式並下載到本地JSCanvas
- scrapy 採集常用的Pipeline(輸出檔案、圖片下載)
- 本地HTML中圖片下載HTML
- 儲存圖片到SD卡SD卡
- asp.net儲存圖片ASP.NET
- 原生JS實現base64圖片下載-圖片儲存到本地JS
- Python學習筆記 - 下載圖片Python筆記
- 使用Scrapy爬取圖片入庫,並儲存在本地
- 圖片下載
- 諮詢數學公式儲存到mysql中 非圖片形式儲存公式MySql
- C# 截圖並儲存為圖片C#
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟
- scrapy框架持久化儲存框架持久化
- 移動端長按儲存、取消長按儲存圖片
- 直播平臺製作,利用python批量讀取儲存圖片Python
- Acrobat怎麼批次儲存PDF小圖片?adobe Acrobat一鍵儲存pdf小圖片的技巧BAT
- Acrobat怎麼批量儲存PDF小圖片?adobe Acrobat一鍵儲存pdf小圖片的技巧BAT
- iOS實現點選圖片放大&長按儲存圖片iOS
- cordova圖片下載
- 圖片儲存-從七牛到 GithubGithub
- Android儲存多張圖片到本地Android
- cocos2dx之儲存截圖圖片
- python 爬蟲 下載百度美女圖片Python爬蟲
- python+selenium 截圖儲存Python
- 教你如何儲存抖音店鋪的商品圖片,自動儲存主圖、詳情圖
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 海量圖片儲存,杉巖分散式物件儲存輕鬆應對分散式物件
- FastDFS+Nginx搭建分散式圖片儲存ASTNginx分散式
- MATLAB將figure視窗儲存為圖片Matlab
- MultipartFile上傳圖片儲存伺服器伺服器
- 圖片下載框架概述框架
- 儲存架構|Haystack太強了!存2600億圖片架構