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中处理异常的教程
May 24 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
Python入门_条件控制(详解)
May 16 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
Python安装与基本数据类型教程详解
May 29 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Django封装交互接口代码
Jul 12 Python
python palywright库基本使用
Jan 21 Python
如何理解python接口自动化之logging日志模块
Jun 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
php中定时计划任务的实现原理
2013/01/08 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
php实现的日历程序
2015/06/18 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
浅谈php的优缺点
2015/07/14 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
详解vue-cli3使用
2018/08/14 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
原生JS实现天气预报
2020/06/16 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
django用户登录验证的完整示例代码
2019/07/21 Python
python 字典套字典或列表的示例
2019/12/16 Python
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
化工专业大学生职业生涯规划书
2014/01/14 职场文书
经费申请报告范文
2015/05/18 职场文书
高老头读书笔记
2015/06/30 职场文书