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的*args和**kwargs用法
Nov 01 Python
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python正则表达式的使用范例详解
Aug 08 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
js继承实现方法详解
2016/12/16 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
python利用正则表达式提取字符串
2016/12/08 Python
Python3.6正式版新特性预览
2016/12/15 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
python加载自定义词典实例
2019/12/06 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
卫校中专生个人自我评价
2013/09/19 职场文书
微博营销计划书
2014/01/10 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
代码复现python目标检测yolo3详解预测
2022/05/06 Python