基于gevent和多线程模型的爬虫:Vulcan Spider
基于gevent和多线程模型,支持WebKit引擎的动态爬虫框架。
特性
- 支持gevent和多线程两种并行模型
 - 支持Webkit引擎 (dom parse,ajax fetch,etc...)
 - 多个自定义选项设置
 
- 最大爬取深度限制
 - 最大抓取URL数限制
 - 同源(域)限制
 - 自定义头部 (UA,Cookies,etc...)
 
依赖
- python 2.7+ (must)
 - gevent 1.0 (must)
 - lxml 2.3 (must,for static parsing)
 - chardet 2.2.1 (must)
 - requests 1.2.3 (must)
 - splinter 0.6.0 (optional,webkit framework for dynamic parsing)
 - phantomjs 1.9 (optional,webkit engine)
 
说明
1, 框架由两部分组成:
- fetcher:下载器,负责获取HTML,送入crawler。
 - crawler:爬取器,负责解析并爬取HTML中的URL,送入fetcher。
 
fetcher和crawler两部分独立工作,互不干扰,通过queue进行链接。fetcher需要发送HTTP请求,涉及到阻塞操作,使用gevent池控制。crawler没有涉及阻塞操作,但为了扩展可以自选gevent池和多线程池两种模型控制。
2, 爬虫相关选项说明:
- concurrent_num : 并行crawler和fetcher数量
 - crawl_tags : 爬行时收集URL所属标签列表
 - depth : 爬行深度限制
 - max_url_num : 最大收集URL数量
 - internal_timeout : 内部调用超时时间
 - spider_timeout : 爬虫超时时间
 - crawler_mode : 爬取器模型(0:多线程模型,1:gevent模型)
 - same_origin : 是否限制相同域下
 - dynamic_parse : 是否使用WebKit动态解析
 
示例
spider = Spider(concurrent_num=20,depth=3,max_url_num=300,crawler_mode=1)  spider.feed_url("http://www.baidu.com/")  spider.start()   TODO
- URL拆分成独立部分存储(pagename,params,fragments,post data)
 - 相似URL合并
 - 保证了框架运行的稳定性,抛砖引玉。
 
 本文由用户 jopen  自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
                 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
                 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
                
                