基于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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!