主要看你定義的「爬蟲」幹什麼用。
一、若是是定向爬取幾個頁面,作一些簡單的頁面解析,
爬取效率不是核心要求,那麼用什麼語言差別不大。
固然要是頁面結構複雜,正則表達式寫得巨複雜,尤爲是用過那些支持xpath的類庫/爬蟲庫後,就會發現此種方式雖然入門門檻低,但擴展性、可維護性等都奇差。所以此種狀況下仍是推薦採用一些現成的爬蟲庫,諸如xpath、多線程支持仍是必須考慮的因素。
二、若是是定向爬取,且主要目標是解析js動態生成的內容
此時候,頁面內容是有js/ajax動態生成的,用普通的請求頁面->解析的方法就無論用了,須要藉助一個相似firefox、chrome瀏覽器的js引擎來對頁面的js代碼作動態解析。
此種狀況下,推薦考慮casperJS+phantomjs或slimerJS+phantomjs ,固然諸如selenium之類的也能夠考慮。
三、若是爬蟲是涉及大規模網站爬取,效率、擴展性、可維護性等是必須考慮的因素時候
大規模爬蟲爬取涉及諸多問題:多線程併發、I/O機制、分佈式爬取、消息通信、判重機制、任務調度等等,此時候語言和所用框架的選取就具備極大意義了。
PHP對多線程、異步支持較差,不建議採用。
NodeJS:對一些垂直網站爬取倒能夠,但因爲分佈式爬取、消息通信等支持較弱,根據本身狀況判斷。
Python:強烈建議,對以上問題都有較好支持。尤爲是Scrapy框架值得做爲第一選擇。優勢諸多:支持xpath;基於twisted,性能不錯;有較好的調試工具;
此種狀況下,若是還須要作js動態內容的解析,casperjs就不適合了,只有基於諸如chrome V8引擎之類本身作js引擎。
至於C、C++雖然性能不錯,但不推薦,尤爲是考慮到成本等諸多因素;對於大部分公司仍是建議基於一些開源的框架來作,不要本身發明輪子,作一個簡單的爬蟲容易,但要作一個完備的爬蟲挺難的。
像我搭建的微信公衆號內容聚合的網站
http://lewuxian.com就是基於Scrapy作的,固然還涉及消息隊列等。能夠參考下圖:
具體內容能夠參考
一個任務調度分發服務的架構