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刷投票的脚本实现代码
Nov 08 Python
Python实现控制台进度条功能
Jan 04 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python中调用其他程序的方式详解
Aug 06 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
jupyter notebook清除输出方式
Apr 10 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
Django REST framework 限流功能的使用
Jun 24 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
实例解析php的数据类型
2018/10/24 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
bootstrap Table实现合并相同行
2019/07/19 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python修改txt文件中的某一项方法
2018/12/29 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
python 实现矩阵按对角线打印
2019/11/29 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
电大自我鉴定
2013/10/27 职场文书
中年人生感言
2014/02/04 职场文书
中考冲刺决心书
2014/03/11 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
员工手册编写范本
2015/05/14 职场文书