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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
Python中文件遍历的两种方法
Jun 16 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
Python搜索引擎实现原理和方法
Nov 27 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python内置random模块生成随机数的方法
May 31 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python实现微信打飞机游戏
Mar 24 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
python代码实现备忘录案例讲解
Jul 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
paypal即时到账php实现代码
2010/11/28 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
php 修改密码实现代码
2017/05/24 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python制作CSDN免积分下载器
2015/03/10 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python3爬取各类天气信息
2018/02/24 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
营销与策划专业毕业生求职信
2013/11/01 职场文书
网页美工求职信
2014/02/15 职场文书
督导岗位职责范本
2015/04/10 职场文书
校园安全主题班会
2015/08/12 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL