最近在研究学习一个好部署,好管理的python爬虫框架,pyspider貌似是一个不错的选择。我再这里整理了一下网上个各种资料,有兴趣的童鞋们接下来就跟我一起学习啦。
相对于 Scrapy 框架来说, pyspider 具有以下优点:
1.有 Web 界面用于开发爬虫,任务、项目管理,查看爬取结果
2.支持各种数据库(MySQL、MongoDB、SQLite 等)存储爬取结果;
3.可以方便设置任务优先级,重新爬取策略;
4.支持单机与分布式部署;
5.支持 PhantomJS 爬取动态网页。
学习目录:
- 安装pyspider
- pyspider 架构学习
- pyspider通用API学习
- css selecotor选择器,pyquery学习
- pyspider扩展学习
- 。。。
step 1: 安装pyspider
首先当然是要安装pyspider啦,请参照这里pyspider的安装
step 2: pyspider 架构学习
如上图所示,pyspider各个组件之间通过消息队列建立连接,运行在各自所属的进程或者线程之中,并且是可替换的。
webui
- web的可视化任务监控
- web脚本编写,单步调试
- 异常捕获、log捕获,print捕获等
Scheduler/调度器
- 任务优先级
- 周期定时任务
- 流量控制
- 基于时间周期或前链标签(如更新时间)的重抓取调度
Fetcher /抓取器
- dataurl支持,用于假抓取模拟传递
- method,header,cookie,proxy,etag,last_modified,timeout等等抓取调度控制
- 可以通过适配类似phantomjs的webkit引擎支持渲染
Processor/处理器
- 内置的pyquery,以jQuery解析页面
- 在脚本中完全控制调度抓取的各项参数
- 可以向后链传递信息
- 异常捕获
特点:
1.各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。scheduler 负责整体的调度控制。
2.任务由 scheduler 发起调度,fetcher 抓取网页内容, processor执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
3.每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。
工作流:
1:每一个python脚本都会有一个on_start函数,当你在WebUI中点击Run按钮时,一个新的任务就会被递交给调度器,等待执行
2:Scheduler会分发这个task到相应的Fetcher中
3:fetcher会抓取初始化的url并生成一个request和response对象,并传递给Processor
4:Processor调用on_start函数并且传递一下新的url去爬取,但完成一个url的抓取工作时,processor会发送一个消息给Scheduler,告诉调度器这个任务完成。并且会发送一个新的task到scheduler中,同时会把爬取的结果发送到一个result_queue中
5:Scheduler接收到新的task,会判断这个任务是一个新的任务还是需要重新抓取的任务,新的任务会把他们加入到任务队列中,如果是重新需要抓取的任务,则需要看一下时间周期,满足要求的才会放到任务队列中去,并且按顺序分发
6:上面的过程会一直持续,直到程序死掉或者我们手动停止。
Pyspider控制台使用说明
队列统计:是为了方便查看爬虫状态,优化爬虫爬取速度新增的状态统计.每个组件之间的数字就是对应不同队列的排队数量.通常来是0或是个位数.如果达到了几十甚至一百说明下游组件出现了瓶颈或错误,需要分析处理.
新建项目:pyspider与scrapy最大的区别就在这,pyspider新建项目调试项目完全在web下进行,而scrapy是在命令行下开发并运行测试.
组名:项目新建后一般来说是不能修改项目名的,如果需要特殊标记可修改组名.直接在组名上点鼠标左键进行修改.注意:组名改为delete后如果状态为stop状态,24小时后项目会被系统删除.
运行状态:这一栏显示的是当前项目的运行状态.每个项目的运行状态都是单独设置的.直接在每个项目的运行状态上点鼠标左键进行修改.运行分为五个状态:TODO,STOP,CHECKING,DEBUG,RUNNING.各状态说明:TODO是新建项目后的默认状态,不会运行项目.STOP状态是停止状态,也不会运行. CHECHING是修改项目代码后自动变的状态.DEBUG是调试模式,遇到错误信息会停止继续运行,RUNNING是运行状态,遇到错误会自动尝试,如果还是错误会跳过错误的任务继续运行.
速度控制:很多朋友安装好用说爬的慢,多数情况是速度被限制了.这个功能就是速度设置项.rate是每秒爬取页面数,burst是并发数.如1/3是三个并发,每秒爬取一个页面.
简单统计:这个功能只是简单的做的运行状态统计,5m是五分钟内任务执行情况,1h是一小时内运行任务统计,1d是一天内运行统计,all是所有的任务统计.
运行:run按钮是项目初次运行需要点的按钮,这个功能会运行项目的on_start方法来生成入口任务.
任务列表:显示最新任务列表,方便查看状态,查看错误等
结果查看:查看项目爬取的结果.
step3: pyspider通用API学习
请移步:pyspider通用API学习
step4: css selecotor选择器,pyquery学习
请移步:css selecotor选择器,pyquery学习
step5: pyspider扩展学习
请移步:pyspider扩展学习
step6: 。。。
请移步:。。。