基于gevent和多線程模型的爬蟲:Vulcan Spider

jopen 10年前發布 | 39K 次閱讀 網絡爬蟲 Vulcan Spider

基于gevent和多線程模型,支持WebKit引擎的動態爬蟲框架。

特性

  1. 支持gevent和多線程兩種并行模型
  2. 支持Webkit引擎 (dom parse,ajax fetch,etc...)
  3. 多個自定義選項設置
  • 最大爬取深度限制
  • 最大抓取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()

基于gevent和多線程模型的爬蟲:Vulcan Spider

TODO

  • URL拆分成獨立部分存儲(pagename,params,fragments,post data)
  • 相似URL合并
  • 保證了框架運行的穩定性,拋磚引玉。

項目主頁:http://www.baiduhome.net/lib/view/home/1391825625410

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