标签:检查 单机 分页 processor 多节点 技术 md5值 request 特点
Pyspider
Secheduler
组件特点:
任务优先级
周期定时任务
流量控制???????
基于时间周期或前链标签的重抓取调度
Self_update_projects() : 从projectdb中检查project,是否有过期,需不需要重爬
Self _check_task_done() : 从消息队列中取出消息(task)
Self_check_request() :
Self] _check_cronjob() :
Self_check_select() :
Self_check_delete() : 检查是否有需要删除的project,pyspider默认Status为STOP,且24小时之后自行删除
Self _try_dump_cnt() :
fetcher
dataurl支持,用于假抓取模拟传递
method, header, cookies, proxy, etag, last_modified, timeout等等抓取调度控制
从task中获得url
callback默认为None
fetch判断是否使用异步(默认全部使用)
判断url类型,其实就是判断是否使用phantomjs(ps:这边的startwith=data没懂)判断是否是js, splash。若都不是,则为普通的HTTP请求
Http_fetch可以看到就是处理cookie,重定向,robots.txt等一系列的方法
内置的PyQuery,以jQuery解析页面
在脚本中完全控制调度抓取的各项参数
可以向后链传递信息
异常捕获
我还没具体看,简单的看了一眼先得出以下结论:
去取来自fetcher的task,调用task中process变量的callback函数(python脚本,存在projectdb中)
将合适的数据输出到result
有其他后续任务则重新放入消息队列并返回到scheduler中。
前端页面是用Flask框架搭建的Web页面,具有以下功能:
web 的可视化任务监控
web 脚本编写,单步调试
异常捕获、log捕获、print捕获等
从别的地方复制过来的:
pyspider爬虫可以分为下面几个核心组件:
Fetcher - 根据url抓取互联网资源,下载html内容。Fetcher通过异步IO的方式实现,可以支持很大并发量的抓取,瓶颈主要在IO开销和IP资源上。单个ip如果爬取过快,很容易触动了bbs的反爬虫系统,很容易被屏蔽,可以使用ip代理池的方式解决ip限制的问题。如果没有ip代理池可以通过pyspider的限速机制,防止触碰反爬虫发机制。支持多节点部署。
Processor - 处理我们编写的爬虫脚本。比如,提取页面中的链接,提取翻页链接,提取页面中的详细信息等,这块比较消耗CPU资源。支持多节点部署。
WebUI - 可视化的界面,支持在线编辑、调试爬虫脚本;支持爬虫任务的实时在线监控;可通过界面启动、停止、删除、限速爬虫任务。支持多节点部署。
Scheduler - 定时任务组件。每个url对应一个task,scheduler负责task的分发,新的url的入库,通过消息队列协调各个组件。只能单节点部署。
ResultWorker - 结果写入组件。支持爬虫结果的自定义实现,比如我们实现了基于RDS的自定义结果写入。可以不实现,默认采用sqlite作为结果输出,可以导出为execel,json等格式。
单机架构图:
详细流程:
集群环境下:
Fetcher, Processor, Scheduler, ResultWorker,它们均通过Redis的队列(基于list实现)互相通信,Scheduler是控制中,负责爬虫任务(task)的分发。一个url的爬虫就是一个task,task对象中有task_id,默认基于url的md5值实现,用于url去重。每个task都有一个默认的优先级,用户可以使用@priority在index_page和detail_page方法上使用;通过自定义优先级,我们可以实现页面的深度优先或广度优先的遍历。
标签:检查 单机 分页 processor 多节点 技术 md5值 request 特点
原文地址:https://www.cnblogs.com/songdongdong6/p/9833004.html