Python爬蟲(chóng)框架scrapy實(shí)現(xiàn)的文件下載功能示例
本文實(shí)例講述了Python爬蟲(chóng)框架scrapy實(shí)現(xiàn)的文件下載功能。分享給大家供大家參考,具體如下:
我們?cè)趯?xiě)普通腳本的時(shí)候,從一個(gè)網(wǎng)站拿到一個(gè)文件的下載url,然后下載,直接將數(shù)據(jù)寫(xiě)入文件或者保存下來(lái),但是這個(gè)需要我們自己一點(diǎn)一點(diǎn)的寫(xiě)出來(lái),而且反復(fù)利用率并不高,為了不重復(fù)造輪子,scrapy提供很流暢的下載文件方式,只需要隨便寫(xiě)寫(xiě)便可用了。
mat.py文件
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractor import LinkExtractor from weidashang.items import matplotlib class MatSpider(scrapy.Spider): name = "mat" allowed_domains = ["matplotlib.org"] start_urls = ['https://matplotlib.org/examples'] def parse(self, response): #抓取每個(gè)腳本文件的訪問(wèn)頁(yè)面,拿到后下載 link = LinkExtractor(restrict_css='div.toctree-wrapper.compound li.toctree-l2') for link in link.extract_links(response): yield scrapy.Request(url=link.url,callback=self.example) def example(self,response): #進(jìn)入每個(gè)腳本的頁(yè)面,抓取源碼文件按鈕,并和base_url結(jié)合起來(lái)形成一個(gè)完整的url href = response.css('a.reference.external::attr(href)').extract_first() url = response.urljoin(href) example = matplotlib() example['file_urls'] = [url] return example
pipelines.py
class MyFilePlipeline(FilesPipeline): def file_path(self, request, response=None, info=None): path = urlparse(request.url).path return join(basename(dirname(path)),basename(path))
settings.py
ITEM_PIPELINES = { 'weidashang.pipelines.MyFilePlipeline': 1, } FILES_STORE = 'examples_src'
items.py
class matplotlib(Item): file_urls = Field() files = Field()
run.py
from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'mat','-o','example.json'])
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專(zhuān)題:《Python Socket編程技巧總結(jié)》、《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
pd.DataFrame統(tǒng)計(jì)各列數(shù)值多少的實(shí)例
今天小編就為大家分享一篇pd.DataFrame統(tǒng)計(jì)各列數(shù)值多少的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12使用python獲取CPU和內(nèi)存信息的思路與實(shí)現(xiàn)(linux系統(tǒng))
這篇文章主要介紹了python獲取CPU和內(nèi)存信息的思路與實(shí)現(xiàn),有需要的朋友可以參考一下2014-01-01Python棧算法的實(shí)現(xiàn)與簡(jiǎn)單應(yīng)用示例
這篇文章主要介紹了Python棧算法的實(shí)現(xiàn)與簡(jiǎn)單應(yīng)用,簡(jiǎn)單講述了棧的原理并結(jié)合實(shí)例形式給出了基于棧實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換與括號(hào)匹配等相關(guān)使用技巧,需要的朋友可以參考下2017-11-11詳解Django的model查詢(xún)操作與查詢(xún)性能優(yōu)化
這篇文章主要介紹了詳解Django的model查詢(xún)操作與查詢(xún)性能優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程
Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來(lái)看一下使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程,包括服務(wù)器端與客戶(hù)端的實(shí)踐.2016-05-05Python中return函數(shù)返回值實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于Python中return函數(shù)返回值實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11如何用Python實(shí)現(xiàn)八數(shù)碼問(wèn)題
這篇文章主要給大家介紹了關(guān)于如何用Python實(shí)現(xiàn)八數(shù)碼問(wèn)題的相關(guān)資料,八數(shù)碼問(wèn)題是一種經(jīng)典的搜索問(wèn)題,它的目標(biāo)是將一個(gè)亂序的八數(shù)碼序列變成一個(gè)有序的八數(shù)碼序列,通常使用 A* 算法來(lái)解決,需要的朋友可以參考下2023-10-10python正則表達(dá)式函數(shù)match()和search()的區(qū)別
match()和search()都是python中的正則匹配函數(shù),那這兩個(gè)函數(shù)有何區(qū)別呢?本文詳細(xì)介紹了這2個(gè)函數(shù)的區(qū)別2021-10-10