scrapy实例matplotlib脚本下载
利用scrapy框架实现matplotlib实例脚本批量下载至本地并进行文件夹分类;话不多说上代码:
首先是爬虫代码:
import scrapy
from scrapy.linkextractors import LinkExtractor
from urllib.parse import urljoin
from ..items import MatplotlibExamplesItem class MatExamplesSpider(scrapy.Spider):
name = 'mat_examples'
# allowed_domains = ['matplotlib.org']
start_urls = ['https://matplotlib.org/gallery/index.html'] def parse(self, response):
le = LinkExtractor(restrict_xpaths='//span[contains(@class, "caption-text")]/a[contains(@class, "reference internal")]')
links = le.extract_links(response)
for link in links:
yield scrapy.Request(link.url, callback=self.parse_mat)
def parse_mat(self, response):
href = response.xpath('//div[contains(@class, "docutils container")]/a/@href').extract_first()
# print('href:', href)
url = response.urljoin(href)
# print('url:', url)
example = MatplotlibExamplesItem()
example['file_urls'] = [url]
return example
分析代码:
parse函数主要为了获取初始url中的所有实例所在页面的url,通过yield输出scrapy.Request中的callback来调用parse_mat函数,下面继续介绍parse_mat函数的作用;
le = LinkExtractor(restrict_xpaths='//span[contains(@class, "caption-text")]/a[contains(@class, "reference internal")]')
此处代码主要是为了获取单个实例代码所在页面链接,如下图示:

parse_mat函数主要是为了获取每个实例所在的下载链接,并存入item中返回至pipelines中进行下载;
href = response.xpath('//div[contains(@class, "docutils container")]/a/@href').extract_first() ---通过xpath规则获取对应的下载链接;
url = response.urljoin(href) ---通过urljoin方法将链接补全;
example = MatplotlibExamplesItem()
example['file_urls'] = [url] ----存入item中返回
下图为显示下载链接所在页面位置,便于使用xpath规则获取链接;

接下来写pipelines代码,具体代码如下:
from scrapy.pipelines.files import FilesPipeline
from urllib.parse import urlparse
from os.path import basename, dirname, join class MatplotlibExamplesFilesPipeline(FilesPipeline):
"""docstring for Matploitem, spiderbExamplesFilesPipeline"""
def file_path(self, request, response=None, info=None):
# print('rl:', request.url)
path = urlparse(request.url).path
print('path', path)
# return join(basename(dirname(path)), basename(path))
return join(basename(path).split('.')[0], basename(path))
通过重写file_path方法保存下载文件,至于文件下载的文件或者路径可在setting中配置;
分析代码:
path = urlparse(request.url).path ---通过urlparse方法将url进行分解,以下用实例进行介绍该方法的输出:

实例1:介绍urlparse方法的输出

实例2:介绍basename与dirname方法的输出
return join(basename(path).split('.')[0], basename(path))
由于获取的下载链接:https://matplotlib.org/_downloads/2d6b8e81608ecb4383d20d5637cff5f8/arctest.py
所以basename(dirname(path))得到的是一串’2d6b8e81608ecb4383d20d5637cff5f8‘哈希值,于是就直接用basename(path).split('.')[0]为文件夹的名字
接下来写上简单的item的代码(这个代码最简单了,就是写url和file):
import scrapy class MatplotlibExamplesItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
file_urls = scrapy.Field()
files = scrapy.Field()
最后贴上setting的代码:
BOT_NAME = 'matplotlib_examples' SPIDER_MODULES = ['matplotlib_examples.spiders']
NEWSPIDER_MODULE = 'matplotlib_examples.spiders' ITEM_PIPELINES = {
# 'scrapy.pipelines.files.FilesPipeline':1,
'matplotlib_examples.pipelines.MatplotlibExamplesFilesPipeline':1,
}
FILES_STORE = 'result' # Obey robots.txt rules
ROBOTSTXT_OBEY = False # Disable cookies (enabled by default)
COOKIES_ENABLED = False # Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
'BOT_NAME' ----爬虫项目名称;一般进行新建scrapy爬虫后都自动写入了;
'ITEM_PIPELINES ' ---此处记得改为自己写的pipelines类名;
'FILES_STORE' ---此处为下载文件所在的文件夹;
其他的配置就基本了;例如是否遵循robots.txt协议,是否用cookies,user-agent改为与浏览器相同,这些都是为了避免被‘ban’;
最后的最后附上项目:

scrapy实例matplotlib脚本下载的更多相关文章
- 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息
title: 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息 date: 2020-03-16 20:00:00 categories: python tags: crawler ...
- 10个提供免费PHP脚本下载的网站
本文将重点介绍10个PHP脚本的免费资源下载站.之前推荐 <16个下载超酷脚本的热门网站>,这些网站除了PHP脚本,还有JavaScript.Java.Perl.ASP等脚本.如果你已是脚 ...
- Python爬虫框架Scrapy实例(三)数据存储到MongoDB
Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...
- 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...
- python爬虫脚本下载YouTube视频
python爬虫脚本下载YouTube视频 爬虫 python YouTube视频 工作环境: python 2.7.13 pip lxml, 安装 pip install lxml,主要用xpath ...
- 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...
- python脚本下载 Google Driver 文件
使用python脚本下载 Google Driver 文件 import yaml import sys import requests import os import re import tarf ...
- Python爬虫框架Scrapy实例(四)下载中间件设置
还是豆瓣top250爬虫的例子,添加下载中间件,主要是设置动态Uesr-Agent和代理IP Scrapy代理IP.Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控 ...
随机推荐
- 1695 windows 2013
1695 windows 2013 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 话说adam ...
- ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
前面我们主要着重于codec.platform.machine驱动程序中如何使用和建立dapm所需要的widget,route,这些是音频驱动开发人员必须要了解的内容,经过前几章的介绍,我们应该知道如 ...
- html5拨打电话及发短信
1.最常用WEB页面一键拨号的电话拨打功能 <a href="tel:15088888888">拨号</a> 2.最常用WEB页面一键发送短信功能: < ...
- Flink之Stateful Operators
Implementing Stateful Functions source function的stateful看官网,要加lock Declaring Keyed State at the Runt ...
- 路一直都在——That's just life
分享一首很喜欢的歌,有时候歌词写得就是经历,就是人生... 穿过人潮汹涌灯火栏栅 没有想过回头 一段又一段走不完的旅程 什么时候能走完 我的梦代表什么 又是什么让我们不安 That's just li ...
- 网络简要<入门篇>
OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...
- RT-Thread 设备驱动I2C浅析及使用
由于 I2C 可以控制多从机的属性,设备驱动模型分为 I2C总线设备(类似与Linux里面的I2C适配器) + I2C从设备: 系统I2C设备驱动主要实现 I2C 总线设备驱动,而具体的I2C 从设 ...
- Application、Activity Stack 和 Task的区别
Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...
- [转]linux之pr命令
转自:http://www.bitscn.com/plus/view.php?aid=6638 本文介绍如何使用Linux的pr命令将大文件分割成多个页面进行打印,并在每个页面上加上标题. Linux ...
- 【转】Linux下变量内容删除与替换
转自:http://www.linuxidc.com/Linux/2015-01/111781.htm 当一个变量被赋予值后,有时会对变量的值进行一些微小的调整,比如删除变量值中特定一部份,或替换掉一 ...