爬蟲是不是用 Node.js 更好?
最近玩爬蟲,而我要爬的是http://xxx/{id},這樣的,不是抓到一個網頁然後通過超鏈接再抓的那種。Node.js 天生非同步的特性,適合這種循環的爬蟲嗎?當然 Python 下也有一些使用非同步或多線程的方法。
另外,可能我對 Node.js 還不太熟悉,我用 Node.js 簡單地搗鼓一下,發現爬出來的結果中會有漏掉的(就是某個 id 本來有數據的,但是爬蟲沒爬到),求指點。
爬蟲這種東西太簡單了,用什麼語言都一樣,同步非同步也沒有特別大的差別,如果要做到搜索引擎那種級別的收錄,靠的是架構,也不靠語言。
年輕人總是這麼幼稚,圖樣圖森破。
你能用nodejs寫爬蟲,覺得nodejs比python好,你去寫就成了。
這跟取代python有什麼關係,別老想著一統天下。世面見多了就知道世界複雜的狠,別老想取代這個取代那個,老老實實搬磚,踏踏實實做人。
Node.js當然適合做爬蟲,當然Python同樣也適合。你所遭遇的問題充其量只是個程序邏輯問題,而不是語言問題。Nodejs做爬蟲最大的優勢大概在於更容易接入諸如phantomjs/casperjs來搞一些更自動化的針對動態載入內容的爬取(當然Python也行,只不過沒那麼原生)。單純只是爬個數據,解析一下DOM,無論Php還是Java還是C++還是C#甚至是VBS都一樣能玩得順溜,代碼量也不見得就會特別大。
目前,Python做爬蟲更多一些,一方面可能是因為諸如Scrapy這樣的總體分布框架更加完善而久經考驗,而另一方面,爬下來的數據若不是自己做玩具,更多的情況下還需要做清洗、分析等相關工作,而不是閉眼存文件/資料庫。這些數據處理相關環節中,Python的生態要比Node好太多。從頭寫一個原始的爬蟲,Node.js 確實很方便,不過其它語言驅動瀏覽器也沒複雜到哪裡。
寫一個能工程實用的,比的其實是現有工具的成熟度,目前 Crawler 雖然已經很像 Scrapy 了,上手很快,但還是需要自己找個 cheerio 之類的來分析 dom,Scrapy 則是全集成的,當然 Crawler 也可隨便換熟悉的 dom 處理框架也算一個好處啦。而搞一個24x7運行的分散式爬蟲系統,Scrapy 成熟度強的就不是一星半點兒了,logging/stats/telnet/email什麼的都標配了,節點任務分配、調度都現成的……
相信假以時日,總會有人拿 Node.js 搞出一套同樣強大的……
你說的很對,nodejs非常適合做爬蟲,我在另外一個回答裡面也強調了這一點。我們已經用nodejs做了多年爬蟲,crawler是目前nodejs中最優秀的爬蟲庫,牆裂推薦https://github.com/bda-research/node-crawler
我就是拿 Node.js 寫爬蟲的,python 確實爬蟲庫比較多,但是 Node.js 也不差呀,而且 js 作為瀏覽器上運行的首選語言,怎麼看都比 python 更適合做爬蟲。
另外爬蟲爬漏數據是很正常的事,你需要自己寫代碼來避免這種情況(自動重試之類的),跟 Node.js 並沒有什麼關係
之前我的公開課,就是用 Node.js 寫爬蟲,有興趣可以去看看 2017-08-04-老司機帶你玩轉知乎數據(爬蟲篇)
簡單的爬蟲用啥都能寫,python和js區別很小,選個自己喜歡的足夠熟練的即可。
複雜的爬蟲語言不是關鍵問題,架構做大了之後也不是一種語言能很好解決的。
需要解決很多耦合比較強的需求,比如ajax爬取,js頁面動態渲染,驗證碼識別,動態代理,流量控制,連接數控制和動態分配。如果有搜索和存儲的要求,需求就更複雜了。
所以專註需求可能比選擇語言更有意義。
不辯論,純推薦。
https://github.com/emadehsan/thal
Getting started with Puppeteer and Chrome Headless for Web Scraping
7 年前就用 C# 模擬人工操作做爬蟲的路過,目前這個 Node.js + Chrome headless 的方案出來之後真的很方便。。
成年人只討論實現,小孩子才討論語言
不知道怎麼這麼多人熱衷於爬蟲,普通的爬蟲真的很簡單,用啥語言都沒多大區別,選擇自己最熟悉的即可。
不好,你這種需求,不熟悉nodejs的話你第一版能把你機器搞死機。
我覺得肯定比python好,建議nodejs往這個方向發展,pythoner以後和他們比吧,放過java吧
少年,你還是要學習一個。。。
爬蟲靠的是思想,你用 node.js 也好, Python 也好,能爬蟲的才是最好的。實踐出真知。可以分別嘗試一下 Node.js + Chrome headless的方案和Scrapy一個Python的方案,多總結多比較。另外也可以了解一下Java的實現,比如Apache Nutch。
從描述上看,似乎尚未涉及 PhantomJS、分散式,插件等。所以,其實樓主的問題不是用什麼語言好,而是先把各種技術了解清楚。爬不到可能會有很多情況,是不是網路質量問題?是不是請求被伺服器拒絕?是不是內存(或者其他)不足?
本人寫nodejs比較多一點,node單線程實現高並發的爬蟲不要太簡單。python寫的較少,體感實現相應的功能只能使用多線程?性能也較差?最近也在學習py,還請多指教了。
滿足需求的最好
還天生非同步...
C/C++可以寫V8,也可以寫CPython,甚至還可以寫JVM,大佬怎麼不用C/C++寫爬蟲啊,C/C++毀天滅地統治一切(?????)
爬蟲是一個命題,各種語言是解決手法,你都會更好,會一種也無所謂。
推薦閱讀:
※為什麼寫的爬蟲只能爬取一幅圖,而不能全部下載所有圖片?
※要怎麼樣的訓練才能在PAT甲級考到八九十分?
※下廚房使用python的技術細節能詳細介紹下嗎??
※python 關於 for循環 命名空間和變數作用域的一個疑問?
※Python到底有多慢?