------------------------------------------------------------------------------------------
scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老,英文文档是最新的。
scrapy 英文文档:https://doc.scrapy.org/en/latest
scrapy 中文文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html高性能爬虫 Scrapy 框架:https://www.cnblogs.com/wwg945/articles/9021888.html
------------------------------------------------------------------------------------------scrapy-redis 配置:https://www.cnblogs.com/wwg945/articles/9046232.html
基于 Scrapy-redis 的分布式爬虫设计:https://www.jianshu.com/p/cd4054bbc757
------------------------------------------------------------------------------------------
Scrapy爬虫入门教程:https://www.jianshu.com/p/43029ea38251
------------------------------------------------------------------------------------------
scarpy 是一个爬虫框架,而 scrapyd 是一个网页版管理 scrapy 的工具, scrapy爬虫写好后,可以用命令行运行,但是如果能在网页上操作就比较方便。 scrapyd 就是为了解决这个问题,能够在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务,功能比较强大。 还有一个更加强大的国产工具 gerapy
Scrapyd 使用详解:https://blog.csdn.net/fengltxx/article/details/79889340
Gerapy分布式爬虫管理框架:https://cuiqingcai.com/4959.html
scrapy_redis去重优化(已有7亿条数据),附Demo福利:https://blog.csdn.net/bone_ace/article/details/53099042
scrapy 框架系列教程:http://www.cnblogs.com/xinyangsdut/p/7628770.html
scrapy 系列教程 - 设置随机 user-agent:https://www.cnblogs.com/cnkai/p/7401343.html
Python分布式爬虫打造搜索引擎Scrapy精讲 系列教程—将bloomfilter(布隆过滤器)集成到scrapy-redis中https://www.cnblogs.com/adc8868/p/7442306.html
scrapy-redis分布式爬虫的搭建过程:https://blog.csdn.net/zwq912318834/article/details/78854571
Scrapy第三篇(基于Scrapy-Redis的分布式以及cookies池):https://cuiqingcai.com/4048.html
scrapy 下载中间件用法:https://www.cnblogs.com/zhaof/p/7198407.html
scrapy 设置代理:使用 IP 代理池 middleware设置proxy代理
关于 scrapy 重定向: 禁止重定向的解决方法:https://www.zhaokeli.com/article/8046.html
https://blog.csdn.net/amaomao123/article/details/52511882
内容都是从官方文档整理过来的,只整理一部分,要想深入了解,可以看官方文档
scrapy整体架构图
Scrapy主要组件
1、引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心)。2、调度器(Scheduler):用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。3、下载器(Downloader): 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)。4、爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。5、项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。6、下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。7、爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。8、调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。
表格:
组件 | 功能 |
---|---|
引擎(Scrapy) | 用来处理整个系统的数据流处理, 触发事务(框架核心) |
调度器(Scheduler) | 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 |
下载器(Downloader) | 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted上的) |
爬虫(Spiders) | 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 |
项目管道(Pipeline) | 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据 |
下载器中间件(Downloader Middlewares) | 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应 |
爬虫中间件(Spider Middlewares) | 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出 |
调度中间件(Scheduler Middewares) | 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应 |
Scrapy 框架 的 运行流程:
- 首先,引擎 从 调度器 中 取出一个链接(URL) 用于 接下来的抓取
- 引擎 把 URL封装成一个 请求(Request) 传给下载器
- 下载器 把 资源下载下来,并 封装成 应答包(Response)
- 爬虫(指自己写的爬虫程序Spider) 解析 应答包(Response)
- 如果 爬虫 从 Response 中 解析出的是实体(Item),则把 Item(实体) 交给 管道 进行进一步的处理。
- 如果 爬虫 从 Response 中 解析出的是链接(URL),则把 URL 交给 Scheduler 等待抓取
scrapy 框架 中 的 spider 爬取流程
对 spider 来说,爬取的循环类似下文:
-
以初始的URL初始化Request,并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。
spider中初始的request是通过调用
start_requests()
来获取的。start_requests()
读取start_urls
中的URL, 并以parse
为回调函数生成Request
。 -
在回调函数内分析返回的(网页)内容,返回
Item
对象、dict、Request
或者一个包括三者的可迭代容器。 返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。 -
在回调函数内,您可以使用 选择器(Selectors) (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。
-
最后,由spider返回的item将被存到数据库(由某些 Item Pipeline 处理)或使用 Feed exports 存入到文件中。
虽然该循环对任何类型的spider都(多少)适用,但Scrapy仍然为了不同的需求提供了多种默认spider。
可以查看官方文档了解更多关于不同需求的spider。
初窥Scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了 网络抓取 所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
一窥示例spider
为了让您了解Scrapy提供了什么功能,我们将提供一个Scrapy Spider的示例,并且以最简单的方式启动该spider。以下的代码将跟进StackOverflow上具有投票数最多的链接,并且爬取其中的一些数据:
import scrapy
class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['http://stackoverflow.com/questions?sort=votes']
def parse(self, response):
for href in response.css('.question-summary h3 a::attr(href)'):
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question)
def parse_question(self, response):
yield {
'title': response.css('h1 a::text').extract()[0],
'votes': response.css('.question .vote-count-post::text').extract()[0],
'body': response.css('.question .post-text').extract()[0],
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}
将上述代码存入到某个文件中,以类似于 stackoverflow_spider.py
命名, 并且使用