Python爬虫框架scrapy实现的文件下载功能示例
本文实例讲述了Python爬虫框架scrapy实现的文件下载功能。分享给大家供大家参考,具体如下:
我们在写普通脚本的时候,从一个网站拿到一个文件的下载url,然后下载,直接将数据写入文件或者保存下来,但是这个需要我们自己一点一点的写出来,而且反复利用率并不高,为了不重复造轮子,scrapy提供很流畅的下载文件方式,只需要随便写写便可用了。
mat.py文件
#-*-coding:utf-8-*-
importscrapy
fromscrapy.linkextractorimportLinkExtractor
fromweidashang.itemsimportmatplotlib
classMatSpider(scrapy.Spider):
name="mat"
allowed_domains=["matplotlib.org"]
start_urls=['https://matplotlib.org/examples']
defparse(self,response):
#抓取每个脚本文件的访问页面,拿到后下载
link=LinkExtractor(restrict_css='div.toctree-wrapper.compoundli.toctree-l2')
forlinkinlink.extract_links(response):
yieldscrapy.Request(url=link.url,callback=self.example)
defexample(self,response):
#进入每个脚本的页面,抓取源码文件按钮,并和base_url结合起来形成一个完整的url
href=response.css('a.reference.external::attr(href)').extract_first()
url=response.urljoin(href)
example=matplotlib()
example['file_urls']=[url]
returnexample
pipelines.py
classMyFilePlipeline(FilesPipeline): deffile_path(self,request,response=None,info=None): path=urlparse(request.url).path returnjoin(basename(dirname(path)),basename(path))
settings.py
ITEM_PIPELINES={
'weidashang.pipelines.MyFilePlipeline':1,
}
FILES_STORE='examples_src'
items.py
classmatplotlib(Item): file_urls=Field() files=Field()
run.py
fromscrapy.cmdlineimportexecute execute(['scrapy','crawl','mat','-o','example.json'])
更多关于Python相关内容可查看本站专题:《PythonSocket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。