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)容可查看本站專題:《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)文章
Python數(shù)據(jù)處理的六種方式總結(jié)
在 Python 的數(shù)據(jù)處理方面經(jīng)常會(huì)用到一些比較常用的數(shù)據(jù)處理方式,比如pandas、numpy等等。今天介紹的這款 Python 數(shù)據(jù)處理的管道數(shù)據(jù)處理方式,通過(guò)鏈?zhǔn)胶瘮?shù)的方式可以輕松的完成對(duì)list列表數(shù)據(jù)的處理,希望對(duì)大家有所幫助2022-11-11
Python?中如何將十六進(jìn)制轉(zhuǎn)換為?Base64
本篇文章將介紹在?Python?中將?hex?轉(zhuǎn)換為?base64?的方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例
這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例,需要的朋友可以參考下2014-04-04
python?sklearn與pandas實(shí)現(xiàn)缺失值數(shù)據(jù)預(yù)處理流程詳解
對(duì)于缺失值的處理,主要配合使用sklearn.impute中的SimpleImputer類、pandas、numpy。其中由于pandas對(duì)于數(shù)據(jù)探索、分析和探查的支持較為良好,因此圍繞pandas的缺失值處理較為常用2022-09-09
Python+Turtle動(dòng)態(tài)繪制一棵樹(shù)實(shí)例分享
這篇文章主要介紹了Python+Turtle動(dòng)態(tài)繪制一棵樹(shù)實(shí)例分享,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Flask和Django框架中自定義模型類的表名、父類相關(guān)問(wèn)題分析
這篇文章主要介紹了Flask和Django框架中自定義模型類的表名、父類相關(guān)問(wèn)題,結(jié)合實(shí)例形式對(duì)比分析了Flask框架與Django框架表名定義方式的不同之處,并簡(jiǎn)單描述了框架的父類繼承問(wèn)題,需要的朋友可以參考下2018-07-07
Python協(xié)程的2種實(shí)現(xiàn)方式分享
在?Python?中,協(xié)程(Coroutine)是一種輕量級(jí)的并發(fā)編程方式,可以通過(guò)協(xié)作式多任務(wù)來(lái)實(shí)現(xiàn)高效的并發(fā)執(zhí)行。本文主要介紹了Python實(shí)現(xiàn)協(xié)程的2種方式,希望對(duì)大家有所幫助2023-04-04

