實際上什麼語言都可以爬蟲,我試過用C++、Java和Python寫過爬蟲去爬取各大門戶的網站,複雜程度:C++>Java>Python。

nodeJS當然也可以寫爬蟲,但我更推薦用Python寫爬蟲,最主要的原因是庫多,requests,xml,beautifulsoup,selenium,scrapy等都是爬蟲利器,只要幾行代碼就可以實現大部分功能。

實際上爬蟲寫到後面關注的是效率和防爬攻防的問題,如隨機headers處理、IP代理池,驗證碼識別等,需要在這些細節上去考量。

如果對學習人工智慧和深度學習感興趣,你可以訂閱我的頭條號,我會在這裡發布所有與演算法、機器學習以及深度學習有關的有趣文章。


這個問題還必須是我來回答最合適,因為我剛剛寫了一個爬蟲。

環境:linux->crontab.php-fpm.mysql.nginx還有一個php框架,忘怎麼拼了,主要用它的mysql類。下面就說說思路。

先說需求,爬取對方數據,然後過濾,只留p,b,strong,img,h,標籤,至於img裡面的其他class,data-xxx,error等,全部剔除,然後分類insert into 到mysql。另有圖片的本地化。記錄抓取用時,隨機ip和user-agent。ip約有20萬,user-agent約有100個。全部隨機。入庫的關鍵數據有對方文章的唯一id,子評論的第一個id,子評論id是抓取評論列表的key,到時拼接請求url時需要

因為目標網站是ajax請求數據,所以在頁面上右鍵查看源碼時根本就看不到內容。我一看,擦!太好了,這樣的話,數據更乾淨。

首先是要拼接請求的url,url里有文章id(咱們入庫了,有),子評論id(有),兩個時間(毫秒級),一個是請求時的時間,一個是請求什麼時間段的文章。

url拼接好了,剩下的就是用curl帶著拼成的header(拼header)是為了隨機更新ip和user-agent。

數據抓回家,過濾,這裡需要來幾個正則表達式,如果有圖片的話,用ob_start那個函數搞過來,寫到本地。然後把寫成的地址在從content里替換了。

最後記錄日誌,包括本比抓取用時,拼的header是什麼,抓了多少條。

最後封裝好,給一個入口。讓後用linux 的crontab設置一下,我的是10分鐘抓取一次,一天大概抓1000條左右吧,可能是我拼接的url還是有問題,每次抓取只有10來條是與上次抓取不重複的。

最後一步就是配置一下mysql的主從複製。做抓取工作的伺服器只做抓取和入庫,庫是master ,另一台伺服器是slave,然後在slave上運行分析數據的程序。當然,這個和你的需求有關,看是什麼需求了。

反正我是只會php,結合crontab也可以實現完全自動化,如果有大神有更好的方案請評論


個人認為python更合適做爬蟲,其實用什麼語言寫爬蟲都可以,就看誰的效率高,演算法寫的好!別的其實都沒所謂!我用delphi寫過爬蟲,一樣的把58,51job,趕集,阿里巴巴,上面的電話,客戶,公司信息都抓下來了!還有人認為java寫也比較方便,資料多。c寫也效率高。其實都是一樣的,都受限於網路速度。google公司里用的語言就更多了java,c,python,nodejs,php,go…等,就我知道的不下10種。其實你用什麼最熟,就用什麼寫,這個最好了。


兩者都可以,在於你對語言的熟悉程度。但如果你從0開始,為什麼不選擇python呢,python的第三方模塊出了名的多,各種爬蟲源碼也是出了名的多,python的大名鼎鼎的爬蟲框架scrapy,以及分散式scrapy-redis組件,會讓你快速高效地寫好爬蟲


node js其實更容易上手 現在很多的前端工程師包括後端都是很熟悉javascript的 而且node js寫個爬蟲也就10來行代碼 現在npm包幾十萬個 比如Request 配合Cheerio做個爬蟲也就幾分鐘的事了


nodejs主要特點是非同步事件機制,支持高並發。但是單線程,默認只使用單核。因而nodejs的特點決定了不太適合做爬蟲,因為沒有辦法發揮自己的優點。Python在爬蟲開發中使用較多,沒有明顯的缺點。


推薦閱讀:
相关文章