最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲Scrapy框架:媒體管道原理學(xué)習(xí)分析

 更新時(shí)間:2021年09月01日 17:13:54   作者:別呀  
這篇文章主要介紹了python爬蟲Scrapy框架:媒體管道原理學(xué)習(xí)分析,有需要的朋友可以借鑒參考,希望可以對廣大一同學(xué)習(xí)的讀者朋友有所幫助

一、媒體管道

1.1、媒體管道的特性

媒體管道實(shí)現(xiàn)了以下特性:

  • 避免重新下載最近下載的媒體
  • 指定存儲位置(文件系統(tǒng)目錄,Amazon S3 bucket,谷歌云存儲bucket)

圖像管道具有一些額外的圖像處理功能:

  • 將所有下載的圖片轉(zhuǎn)換為通用格式(JPG)和模式(RGB)
  • 生成縮略圖
  • 檢查圖像的寬度/高度,進(jìn)行最小尺寸過濾

1.2、媒體管道的設(shè)置

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 120}      啟用
FILES_STORE = '/path/to/valid/dir'		   文件管道存放位置
IMAGES_STORE = '/path/to/valid/dir'		  圖片管道存放位置
FILES_URLS_FIELD = 'field_name_for_your_files_urls'    自定義文件url字段
FILES_RESULT_FIELD = 'field_name_for_your_processed_files'   自定義結(jié)果字段
IMAGES_URLS_FIELD = 'field_name_for_your_images_urls'         自定義圖片url字段
IMAGES_RESULT_FIELD = 'field_name_for_your_processed_images'      結(jié)果字段
FILES_EXPIRES = 90   文件過期時(shí)間   默認(rèn)90天
IMAGES_EXPIRES = 90    圖片過期時(shí)間   默認(rèn)90天
IMAGES_THUMBS = {'small': (50, 50), 'big':(270, 270)}     縮略圖尺寸
IMAGES_MIN_HEIGHT = 110     過濾最小高度
IMAGES_MIN_WIDTH = 110      過濾最小寬度
MEDIA_ALLOW_REDIRECTS = True    是否重定向

二、ImagesPipeline類簡介

#解析settings里的配置字段
def __init__(self, store_uri, download_func=None, settings=None)
#圖片下載
def image_downloaded(self, response, request, info)
#圖片獲取   圖片大小的過濾  #縮略圖的生成
def get_images(self, response, request, info)
#轉(zhuǎn)化圖片格式
def convert_image(self, image, size=None)
#生成媒體請求  可重寫
def get_media_requests(self, item, info)
	return [Request(x) for x in item.get(self.images_urls_field, [])] #得到圖片url  變成請求  發(fā)給引擎
#此方法獲取文件名  進(jìn)行改寫
def item_completed(self, results, item, info)
#文件路徑 
def file_path(self, request, response=None, info=None)
#縮略圖的存儲路徑
def thumb_path(self, request, thumb_id, response=None, info=None):

三、小案例:使用圖片管道爬取百度圖片

(當(dāng)然不使用圖片管道的話也是可以爬取百度圖片的,但這還需要我們?nèi)シ治鼍W(wǎng)頁的代碼,還是有點(diǎn)麻煩,使用圖片管道就可以省去這個(gè)步驟了)

3.1、spider文件

注意:由于需要添加所有的請求頭,所以我們要重寫start_requests函數(shù)

import re
import scrapy
from ..items import DbimgItem
class DbSpider(scrapy.Spider):
    name = 'db'
    # allowed_domains = ['xxx.com']
    start_urls = ['https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8B%97&oq=%E7%8B%97&rsp=-1']
    def start_requests(self):  #因?yàn)樾枰砑铀械恼埱箢^,所以我們要重寫start_requests函數(shù)
        # url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8B%97&oq=%E7%8B%97&rsp=-1'
        headers = {
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "max-age=0",
            "Connection": "keep-alive",
            "Cookie": "BIDUPSID=4B61D634D704A324E3C7E274BF11F280; PSTM=1624157516; BAIDUID=4B61D634D704A324C7EA5BA47BA5886E:FG=1; __yjs_duid=1_f7116f04cddf75093b9236654a2d70931624173362209; BAIDUID_BFESS=101022AEE931E08A9B9A3BA623709CFE:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; cleanHistoryStatus=0; H_PS_PSSID=34099_33969_34222_31660_34226_33848_34113_34073_33607_34107_34134_34118_26350_22159; delPer=0; PSINO=6; BA_HECTOR=24ak842ka421210koq1gdtj070r; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; userFrom=www.baidu.com; firstShowTip=1; indexPageSugList=%5B%22%E7%8B%97%22%2C%22%E7%8C%AB%E5%92%AA%22%2C%22%E5%B0%8F%E9%80%8F%E6%98%8E%22%5D; ab_sr=1.0.1_OGYwMTZiMjg5ZTNiYmUxODIxOTgyYTllZGMyMzhjODE2ZWE5OGY4YmEyZWVjOGZhOWIxM2NlM2FhZTQxMmFjODY0OWZiNzQxMjVlMWIyODVlZWFiZjY2NTQyMTZhY2NjNTM5NDNmYTFmZjgxMTlkOGYxYTUzYTIzMzA0NDE3MGNmZDhkYTBkZmJiMmJhZmFkZDNmZTM1ZmI2MWZkNzYyYQ==",
            "Host": "image.baidu.com",
            "Referer": "https://image.baidu.com/",
            "sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
            "sec-ch-ua-mobile": "?0",
            "Sec-Fetch-Dest": "document",
            "Sec-Fetch-Mode": "navigate",
            "Sec-Fetch-Site": "same-origin",
            "Sec-Fetch-User": "?1",
            "Upgrade-Insecure-Requests": "1",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"
        }
        for url in self.start_urls:
            yield scrapy.Request(url,headers=headers,callback=self.parse,dont_filter=True)
    def parse(self, response):
        img_urls = re.findall('"thumbURL":"(.*?)"', response.text)
        # print(img_urls)
        item = DbimgItem()
        item['image_urls'] = img_urls
        yield item

3.2、items文件

import scrapy
class DbimgItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    image_urls = scrapy.Field()

3.3、settings文件

ROBOTSTXT_OBEY = False
#打開我們寫的管道
ITEM_PIPELINES = {
   # 'dbimg.pipelines.DbimgPipeline': 300,
    'dbimg.pipelines.ImgPipe': 300,
}
#圖片存放位置
IMAGES_STORE = 'D:/python test/爬蟲/scrapy6/dbimg/imgs'

3.4、pipelines文件

import os
from itemadapter import ItemAdapter
from scrapy.pipelines.images import ImagesPipeline
import settings
"""
def item_completed(self, results, item, info):
    with suppress(KeyError):
        ItemAdapter(item)[self.images_result_field] = [x for ok, x in results if ok]
    return item
"""
class ImgPipe(ImagesPipeline):
    num=0
    #重寫此函數(shù)修改獲取的圖片的名字  不然圖片名稱就是一串?dāng)?shù)字字母
    def item_completed(self, results, item, info):
        images_path = [x['path'] for ok, x in results if ok]
        #print('results: ',results)   先查看下results的數(shù)據(jù)格式,然后才能獲取到我們需要的值
        for image_path in images_path:
            os.rename(settings.IMAGES_STORE + "/" + image_path, settings.IMAGES_STORE + "/" + str(self.num) + ".jpg")
            self.num += 1

結(jié)果:

以上就是python爬蟲Scrapy框架:媒體管道原理學(xué)習(xí)分析的詳細(xì)內(nèi)容,更多關(guān)于python爬蟲Scrapy框架的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python大批量寫入數(shù)據(jù)(百萬級別)的方法

    Python大批量寫入數(shù)據(jù)(百萬級別)的方法

    這篇文章主要給大家介紹了關(guān)于Python大批量寫入數(shù)據(jù)(百萬級別)的相關(guān)資料,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)的需求,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-07-07
  • Pytorch神經(jīng)網(wǎng)絡(luò)參數(shù)管理方法詳細(xì)講解

    Pytorch神經(jīng)網(wǎng)絡(luò)參數(shù)管理方法詳細(xì)講解

    這篇文章主要介紹了Pytorch神經(jīng)網(wǎng)絡(luò)參數(shù)管理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Python必備技能之debug調(diào)試教程詳解

    Python必備技能之debug調(diào)試教程詳解

    這篇文章主要為大家詳細(xì)介紹了Python初學(xué)者必須要學(xué)會的技能——在Python中進(jìn)行debug操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • Python函數(shù)式編程實(shí)現(xiàn)登錄注冊功能

    Python函數(shù)式編程實(shí)現(xiàn)登錄注冊功能

    這篇文章主要為大家詳細(xì)介紹了Python函數(shù)式編程實(shí)現(xiàn)登錄注冊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python連接達(dá)夢數(shù)據(jù)庫的實(shí)現(xiàn)示例

    Python連接達(dá)夢數(shù)據(jù)庫的實(shí)現(xiàn)示例

    本文主要介紹了Python連接達(dá)夢數(shù)據(jù)庫的實(shí)現(xiàn)示例,dmPython是DM提供的依據(jù)Python DB API version 2.0中API使用規(guī)定而開發(fā)的數(shù)據(jù)庫訪問接口,使Python應(yīng)用程序能夠?qū)M數(shù)據(jù)庫進(jìn)行訪問
    2023-12-12
  • Python?基于TCP?傳輸協(xié)議的網(wǎng)絡(luò)通信實(shí)現(xiàn)方法

    Python?基于TCP?傳輸協(xié)議的網(wǎng)絡(luò)通信實(shí)現(xiàn)方法

    網(wǎng)絡(luò)編程指在網(wǎng)絡(luò)環(huán)境中,如何實(shí)現(xiàn)不在同一物理位置中的計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)通信,本文重點(diǎn)給大家介紹Python?基于TCP?傳輸協(xié)議的網(wǎng)絡(luò)通信實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • python連接access數(shù)據(jù)庫兩種方式總結(jié)

    python連接access數(shù)據(jù)庫兩種方式總結(jié)

    這篇文章主要介紹了python連接access數(shù)據(jù)庫兩種方式的相關(guān)資料,SQLAlchemy使用access方言進(jìn)行連接,而pyodbc則通過pyodbc模塊實(shí)現(xiàn)連接,文章還提供了連接代碼示例,需要的朋友可以參考下
    2025-02-02
  • Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Bokeh是Python中的數(shù)據(jù)可視化庫,提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • Python?編程操作連載之字符串,列表,字典和集合處理

    Python?編程操作連載之字符串,列表,字典和集合處理

    這篇文章主要介紹了Python?編程操作連載之字符串,列表,字典和集合處理,文章圍繞主題相關(guān)資料展開詳細(xì)的內(nèi)容介紹,需要的朋友可參考一下下面文章內(nèi)容
    2022-06-06
  • 一文教你Python如何創(chuàng)建屬于自己的IP池

    一文教你Python如何創(chuàng)建屬于自己的IP池

    這篇文章主要為大家詳細(xì)介紹了python如何創(chuàng)建屬于自己的IP池,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-04-04

最新評論

昭平县| 丹东市| 肥西县| 乐昌市| 三亚市| 温宿县| 伊宁县| 黑水县| 连江县| 叶城县| 分宜县| 老河口市| 上高县| 都兰县| 原平市| 精河县| 田东县| 沾益县| 筠连县| 濮阳县| 鄢陵县| 兰溪市| 夹江县| 贵州省| 阆中市| 逊克县| 晋中市| 贵州省| 苍南县| 潞城市| 特克斯县| 台北市| 丹凤县| 新安县| 宁明县| 饶阳县| 古田县| 晋宁县| 芷江| 白玉县| 灵丘县|