利用 scrapy 集成社區爬蟲功能

社區活躍度或者貢獻愈來愈受到重視,每每會做爲得到工做或者承接項目的加分項。爲了方便用戶展現本身的社區資料,雨點兒網中增長了一個社區爬蟲功能。html

當前只爬取了用戶主頁上一些簡單的信息,若是有需求請提到咱們的項目議題中java

效果以下python

spider

功能實現

代碼放在了github上,源碼git

如圖所示,在以前的架構上(http://segmentfault.com/a/1190000003808733),我增長了橙色虛線框內的部分,包括:github

  • scrapyd:一個用於運行爬蟲任務的webserviceweb

  • spiders:使用scrapy框架實現的爬蟲sql

  • mongo:存放爬取的數據mongodb

image

使用scrapy框架

scrapy是一個python爬蟲框架,想要快速實現爬蟲推薦使用這個。chrome

能夠參考以下資料自行學習:json

  1. 官方文檔官方例子

  2. 一個簡單明瞭的入門博客注意:博客中scrapy的安裝步驟能夠簡化,直接使用 pip install scrapy,安裝過程當中可能會缺乏幾個lib,ubuntu使用 apt-get install libffi-dev libxml2-dev libxslt1-dev -y

使用mongodb存儲數據

mongo很是適合存儲爬蟲數據,支持異構數據。這意味着你能夠隨時改變爬蟲策略抓取不一樣的數據,而不用擔憂會和之前的數據衝突(使用sql就須要蛋疼的修改表結構了)。

經過scrapy的pipline來集成mongo,很是方便。

安裝mongo

apt-get install mongodb
pip install pymongo

使用xpath提取頁面數據

在編寫爬蟲的過程當中須要使用xpath表達式來提取頁面數據,在chrome中可使用XPath Helper來定位元素,很是方便。使用方法:

  1. 打開XPath Helper插件

  2. 鼠標點擊一下頁面,按住shift鍵,把鼠標移動到須要選取的元素上,插件會將該元素標記爲黃色,並給出對應的xpath表達式,以下圖:
    qq 20151021232428

  3. 在爬蟲程序中使用這個表達式selector.xpath(..../text()").extract()

使用scrapyd把爬蟲集成到系統中

編寫好爬蟲後,我門能夠經過執行scrapy crawl spidername命令來運行爬蟲程序,但這還不夠。

一般咱們經過手動或者定時任務(cron)來執行爬蟲,而這裏咱們須要經過web應用來觸發爬蟲。即,當用戶更新綁定的社交帳號時,去執行一次爬蟲。來分析一下:

  1. 爬蟲執行過程當中會阻塞當前進程,爲了避免阻塞用戶請求,必須經過異步的方式來運行爬蟲。

  2. 可能有多個用戶同時更新資料,這就要求可以同時執行多個爬蟲,而且要保證系統不會超載。

  3. 能夠擴展成分佈式的爬蟲。

方案1:使用celery運行爬蟲

鑑於項目當前的架構,準備使用celery來執行異步爬蟲。可是碰到了兩個問題:

  1. scrapy框架下,須要在scrapy目錄下執行爬蟲,不然沒法獲取到settings,這個用起來有點彆扭,不過還能解決。

  2. celery中反覆運行scrapy的爬蟲會報錯:raise error.ReactorNotRestartable()。緣由是scrapy用的twisted調度框架,不能夠在進程中重啓。

stackoverflow上有討論過這個問題,嘗試了一下,搞不定,放棄這個方案。若是你有解決這個問題的方法,期待分享:)

方案2:使用scrapyd

scrapy文檔中提到了可使用scrapyd來部署scrapyd是一個用於運行scrapy爬蟲的webservice,使用者可以經過http請求來運行爬蟲。

你只須要使用scrapyd-client將爬蟲發佈到scrapyd中,而後經過以下命令就能夠運行爬蟲程序。

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
{"status": "ok", "jobid": "26d1b1a6d6f111e0be5c001e648c57f8"}

這意味什麼:

  1. 爬蟲應用和本身的web應用徹底解耦,只有一個http接口。

  2. 因爲使用http接口,爬蟲能夠放在任何可以被訪問的主機上運行。一個簡易的分佈式爬蟲,不是嗎?

  3. scrapyd使用sqlite隊列來保存爬蟲任務,實現異步執行。

  4. scrapyd能夠同時執行多個爬蟲,最大進程數可配,防止系統過載。

歡迎使用咱們的爬蟲功能來收集社交資料。

使用方法

  1. 成爲雨點兒網用戶,進入用戶主頁,點擊編輯按鈕
    image

  2. 填寫社交帳號,點擊更新按鈕
    image

  3. 爬蟲會在幾秒內完成工做,刷新我的主頁就能看到你的社區資料了,你也能夠把我的主頁連接附在電子簡歷中喲:)

相關文章
相關標籤/搜索