Infi-chu:git
http://www.cnblogs.com/Infi-chu/github
1、pyspider介绍
1.基本功能
提供WebUI可视化功能,方便编写和调试爬虫
提供爬取进度监控、爬取结果查看、爬虫项目管理
支持多种数据库,MySQL、MongoDB、Redis、SQLite、PostgreSQL等
支持多种消息队列,RabbitMQ、Beanstalk、Redis等
提供优先级控制、失败重试、定时抓取等
对接了PhantomJS,可实现对JavaScript页面的抓取
支持单机、分布式、Docker部署正则表达式
2.pyspider 与 scrapy 对比
pyspider提供WebUI,scrapy原生不具有此功能
pyspider调试方便
pyspider支持PhantomJS、scrapy支持scrapy-Splash组件
pyspider内置pyquery做为选择器,scrapy对接了XPath、CSS选择器和正则表达式
pyspider扩展程度低数据库
3.框架设计
三大模块:调度器(Scheduler)、抓取器(Fetcher)、处理器(Processer)
4.具体流程
1.每一个pyspider项目都对用一个Python脚本,该脚本定义了一个Handler类,使用on_start()方法,开始项目,而后交由scheduler进行调度处理
2.Scheduler将抓取任务传给Fetcher,Fetcher响应完成后,将响应传给Processer
3.Processer处理并提取新的URL再经过消息队列的方式传给Scheduler,若是生成了新的提取结果,则发往结果队列等待Result Worker处理
4.循环上述过程,直到抓取结束,结束时会调用on_finished()cookie
5.例子
https://github.com/Infi-chu/quna框架
2、pyspider详解
1.启动:
pyspider all
2.crawl()方法
url:爬取的URL,能够定义为单个URL字符串或URL列表
callback:回调函数,指定了该URL对应的响应内容应该由哪一个方法来解析
age:任务的有效时间
priority:优先级,默认为0,越大越优先
exetime:能够设置定时任务,其值是时间戳,默认是0,表明当即执行
retries:重试次数,默认是3
itag:设置断定网页是否发生变化的节点值
auto_recrawl:开启后,爬取任务在过时后从新执行
method:HTTP请求方式
params:定义GET请求参数
data:定义POST请求参数
files:上传的文件,需指定文件名
user_agent:User-Agent
headers:Request Headers
cookies:Cookies,字典格式
connect_timeout:初始化链接时最长的等待时间,默认是20秒
timeout:抓取网页的最长等待时间,默认是120秒
allow_redirects:肯定是否自动处理重定向,默认是True
validate_cert:是否验证证书,默认是True
proxy:代理
fetch_type:开启PhantomJS渲染
js_script:页面加载完毕后执行的JavaScript脚本
js_run_at:脚本运行位置,默认在节点结尾
js_viewport_width/js_viewport_height:JavaScript渲染页面的窗口大小
load_images:肯定是否加载图片,默认是False
save:在不一样的方法之间传递参数
cancel:取消任务
force_update:强制更新状态
3.任务区分:
判断是否为同一任务,将比较URL的MD5值是否同样
4.全局配置:
在crawl_config中指定全局配置
5.定时爬取
经过every属性来设置时间间隔
6.项目状态:
TODO 刚建立还未执行
STOP 中止
CHECKING 运行的项目被修改后
DEBUG/RUNNNING 运行
PAUSE 屡次出错,挂起或暂停
7.删除项目
将状态设置为STOP,分组名称修改成delete,24小时后自动删除
scrapy