爬蟲技術用什麼語言比較合適?

說起大數據,不自覺的就想到爬蟲,說起爬蟲用的語言,很多人首先想到的就是Python,Python真的有那麼神奇嗎?除了它還可以用哪些語言?

c#、java都可以寫爬蟲,原理其實相差不大,只不過是平臺問題。可以考慮的,如果是定向爬取幾個頁面,做一些簡單的頁面解析,爬取效率不是核心要求,那麼用什麼語言本質上來說差異不大。

其實用什麼語言還是需要看情況,分主要的目的的。

如果是定向爬取,且主要目標是解析js動態生成的內容,此時候,頁面內容是有js/ajax動態生成的,用普通的請求頁面->解析的方法就不管用了,需要藉助一個類似firefox、chrome瀏覽器的js引擎來對頁面的js代碼做動態解析。

此種情況下,推薦考慮casperJS+phantomjs或slimerJS+phantomjs ,當然諸如selenium之類的也可以考慮。

3、如果爬蟲是涉及大規模網站爬取,效率、擴展性、可維護性等是必須考慮的因素時候,大規模爬蟲爬取涉及諸多問題:多線程併發、I/O機制、分佈式爬取、消息通訊、判重機制、任務調度等等,此時候語言和所用框架的選取就具有極大意義了。

PHP對多線程、異步支持較差,不建議採用。

NodeJS:對一些垂直網站爬取倒可以,但由於分佈式爬取、消息通訊等支持較弱,根據自己情況判斷。

Python:強烈建議,對以上問題都有較好支持。尤其是Scrapy框架值得作為第一選擇。

主要原因是:

1)抓取網頁本身的接口

相比與其他靜態編程語言,如java,c#,C++,python抓取網頁文檔的接口更簡潔;相比其他動態腳本語言,如perl,shell,python的urllib2包提供了較為完整的訪問網頁文檔的API。(當然ruby也是很好的選擇)

此外,抓取網頁有時候需要模擬瀏覽器的行為,很多網站對於生硬的爬蟲抓取都是封殺的。這是我們需要模擬user agent的行為構造合適的請求,譬如模擬用戶登陸、模擬session/cookie的存儲和設置。在python裡都有非常優秀的第三方包幫你搞定,如Requests,mechanize

2)網頁抓取後的處理

抓取的網頁通常需要處理,比如過濾html標籤,提取文本等。python的beautifulsoap提供了簡潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。

其實以上功能很多語言和工具都能做,但是用python能夠幹得最快,最乾淨。

除了這些,還有很多優點:支持xpath;基於twisted,性能不錯;有較好的調試工具;

此種情況下,如果還需要做js動態內容的解析,casperjs就不適合了,只有基於諸如chrome V8引擎之類自己做js引擎。

至於C、C++雖然性能不錯,但不推薦,尤其是考慮到成本等諸多因素;對於大部分公司還是建議基於一些開源的框架來做,不要自己發明輪子,做一個簡單的爬蟲容易,但要做一個完備的爬蟲挺難的。


分享到:


相關文章: