Python爬虫框架scrapy实现的文件下载功能示例


Posted in Python onAugust 04, 2018

本文实例讲述了Python爬虫框架scrapy实现的文件下载功能。分享给大家供大家参考,具体如下:

我们在写普通脚本的时候,从一个网站拿到一个文件的下载url,然后下载,直接将数据写入文件或者保存下来,但是这个需要我们自己一点一点的写出来,而且反复利用率并不高,为了不重复造轮子,scrapy提供很流畅的下载文件方式,只需要随便写写便可用了。

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):


 #抓取每个脚本文件的访问页面,拿到后下载
    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):



#进入每个脚本的页面,抓取源码文件按钮,并和base_url结合起来形成一个完整的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'])

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
Python 类的特殊成员解析
Jun 20 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
Python2与Python3的区别实例分析
Apr 11 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
python logging 日志的级别调整方式
Feb 21 Python
信号生成及DFT的python实现方式
Feb 25 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
python3.7调试的实例方法
Jul 21 Python
python递归函数用法详解
Oct 26 Python
python生成1行四列全2矩阵的方法
Aug 04 #Python
查看python下OpenCV版本的方法
Aug 03 #Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 #Python
numpy中loadtxt 的用法详解
Aug 03 #Python
matplotlib给子图添加图例的方法
Aug 03 #Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 #Python
Numpy之文件存取的示例代码
Aug 03 #Python
You might like
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python 链接和操作 memcache方法
2017/03/04 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
企业办公室岗位职责
2014/03/12 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
入股协议书范本
2014/11/01 职场文书
2014年检验科工作总结
2014/11/22 职场文书
清明节寄语2015
2015/03/23 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
网吧管理制度范本
2015/08/05 职场文书