真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么正確使用Scrapy自帶的FilesPipeline

這篇文章主要講解了“怎么正確使用Scrapy自帶的FilesPipeline”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么正確使用Scrapy自帶的FilesPipeline”吧!

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供三水網(wǎng)站建設(shè)、三水做網(wǎng)站、三水網(wǎng)站設(shè)計(jì)、三水網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、三水企業(yè)網(wǎng)站模板建站服務(wù),10年三水做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

Scrapy自帶的  FilesPipeline和ImagesPipeline用來(lái)下載圖片和文件非常方便,根據(jù)它的官方文檔[1]說明,我們可以很容易地開啟這兩個(gè)  Pipeline。

如果只是要下載圖片,那么用 FilesPipeline 和 ImagesPipeline 都可以,畢竟圖片也是文件。但因?yàn)槭褂? ImagesPipeline 要單獨(dú)安裝第三方庫(kù) Pillow,所以我們以 FilesPipeline 為例來(lái)進(jìn)行說明。

假設(shè)爬蟲通過解析網(wǎng)頁(yè)的源代碼,獲取到了一張圖片,圖片的地址為:https://kingname-1257411235.cos.ap-chengdu.myqcloud.com/640.gif  當(dāng)然,png 、 jpg 、甚至 rar、pdf、zip 都可以。

為了使用 Scrapy 自帶的 FilesPipeline來(lái)下載這張圖片,我們需要做幾步設(shè)置。

定義 items

首先定義任意一個(gè) items,需要確保這個(gè) items  里面,必須包含file_urls字段和files字段,除了這兩個(gè)必備字段外,你還可以任意增加其他字段。


怎么正確使用Scrapy自帶的FilesPipeline

啟動(dòng)FilesPipeline

在settings.py中,找到 ITEM_PIPELINES配置,如果它被注釋了,那么就解除注釋。然后添加如下的配置:

'scrapy.pipelines.files.FilesPipeline': 1

再添加一個(gè)配置項(xiàng)FILES_STORE,它的值是你想要保存圖片的文件夾地址。

修改以后如下圖所示:

怎么正確使用Scrapy自帶的FilesPipeline

下載圖片

接下來(lái),就進(jìn)入到我們具體的爬蟲邏輯中了。在爬蟲里面,你在任意一個(gè) parse 函數(shù)中提取到了一張或者幾張圖片的URL 后,把它(們)以列表的形式放入到  item 里面的 file_urls 字段中。如下圖所示。

怎么正確使用Scrapy自帶的FilesPipeline

注意,此時(shí)files字段不需要設(shè)置任何的值。其他非必需字段就根據(jù)你的需求只有設(shè)置即可。

獲取結(jié)果

由于我們?cè)O(shè)置了scrapy.pipelines.images.FilesPipeline的優(yōu)先級(jí)為1,是最高優(yōu)先級(jí),所以它會(huì)比所有其他的 Pipeline  更先運(yùn)行。于是,我們可以在后面的其他Pipeline 中,檢查 item 的 files 字段,就會(huì)發(fā)現(xiàn)我們需要的圖片地址已經(jīng)在里面了。如下圖所示:

怎么正確使用Scrapy自帶的FilesPipeline

item 中的 files 字段變成了一個(gè)包含字典的列表。字典中有一項(xiàng)叫做path的  Key,它的值就是圖片在電腦上的路徑,例如full/7f471f6dbc08c2db39125b20b0471c3b21c58f3e.gif表示在images文件夾中的full文件夾中的7f471f6dbc08c2db39125b20b0471c3b21c58f3e.gif文件,如下圖所示:

怎么正確使用Scrapy自帶的FilesPipeline

文件名是該文件的 md5值,如果你想重命名,可以在后續(xù)的 pipeline 中,根據(jù) path 的值找到文件,然后修改名字。

修改請(qǐng)求頭

看到這里,大家會(huì)不會(huì)有一個(gè)疑問,在使用FilesPipeline的時(shí)候,Scrapy 會(huì)加上請(qǐng)求頭嗎?它會(huì)用哪一個(gè)請(qǐng)求頭呢?

實(shí)際上,Scrapy 在使用  FilesPipeline和ImagesPipeline時(shí),是不會(huì)設(shè)置請(qǐng)求頭的。如果網(wǎng)站會(huì)監(jiān)控請(qǐng)求圖片或者文件的請(qǐng)求的請(qǐng)求頭,那么就可以立刻發(fā)現(xiàn)這個(gè)請(qǐng)求是通過  Scrapy 發(fā)起的。

為了證明這一點(diǎn),我們可以查看FilesPipeline的源代碼:

怎么正確使用Scrapy自帶的FilesPipeline

在  scrapy/pipelines/files.py文件中,可以看到,F(xiàn)ilesPipeline是通過get_media_requests方法來(lái)構(gòu)造對(duì)圖片的請(qǐng)求對(duì)象的。這個(gè)請(qǐng)求對(duì)象沒有設(shè)置任何的請(qǐng)求頭。

上面的截圖是老版本的 Scrapy 的源代碼。新版本的源代碼里面,get_media_requests可能是這樣的:

def get_media_requests(self, item, info):     urls = ItemAdapter(item).get(self.files_urls_field, [])     return [Request(u) for u in urls]

為了手動(dòng)加上請(qǐng)求頭,我們可以自己寫一個(gè)  pipeline,繼承FilesPipeline但覆蓋get_media_requests方法,如下圖所示:

怎么正確使用Scrapy自帶的FilesPipeline

注意,在實(shí)際使用中,你可能還要加上 Host 和 Referer。

然后修改settings.py中的ITEM_PIPELINES,指向我們自定義的這個(gè)pipeline:

怎么正確使用Scrapy自帶的FilesPipeline

這樣一來(lái),F(xiàn)ilesPipeline就能夠正確加上請(qǐng)求頭了。

感謝各位的閱讀,以上就是“怎么正確使用Scrapy自帶的FilesPipeline”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么正確使用Scrapy自帶的FilesPipeline這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享標(biāo)題:怎么正確使用Scrapy自帶的FilesPipeline
標(biāo)題鏈接:http://weahome.cn/article/jdgigd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部