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 3.x 新特性及10大变化
Jun 12 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
python绘制地震散点图
Jun 18 Python
python多线程并发实例及其优化
Jun 27 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
python plotly画柱状图代码实例
Dec 13 Python
如何通过python实现人脸识别验证
Jan 17 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网页后退不再出现过期
2007/03/08 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
python实现图片批量剪切示例
2014/03/25 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
python获取中文字符串长度的方法
2018/11/14 Python
python实现文件的分割与合并
2019/08/29 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
python中for in的用法详解
2020/04/17 Python
Python 列表反转显示的四种方法
2020/11/16 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
统计员岗位职责范本
2015/04/14 职场文书
雷锋电影观后感
2015/06/10 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Mysql 设置boolean类型的操作
2021/06/04 MySQL
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android