各種語言寫網路爬蟲有什麼優點缺點?

來源:互聯網
上載者:User
關鍵字 python JAVA PHP
現在好像很多人在用python
但也看到了PHP,JAVA,C++等等。
本人以上各種語言省慬皮毛。
該用那種語言開發爬蟲呢?

回複內容:

謝邀!
我用 PHP 和 Python 都寫過爬蟲和本文提取程式。
最開始使用 PHP 所以先說說 PHP 的優點:
1.語言比較簡單,PHP 是非常隨意的一種語言。寫起來容易讓你把精力放在你要做的事情上,而不是各種文法規則等等。
2.各種功能模組齊全,這裡分兩部分:
1.網頁下載:curl 等擴充庫;
2.文檔解析:dom、xpath、tidy、各種轉碼工具,可能跟題主的問題不太一樣,我的爬蟲需要提取本文,所以需要很複雜的文本處理,所以各種方便的文本處理工具是我的大愛。;
總之容易上手。

缺點:
1.並發處理能力較弱:由於當時 PHP 沒有線程、進程功能,要想實現並發需要借用多路服用模型,PHP 使用的是 select 模型。實現其來比較麻煩,可能是因為水平問題我的程式經常出現一些錯誤,導致漏抓。

再說說 Python:
優點:
1.各種爬蟲架構,方便高效的下載網頁;
2.多線程、進程模型成熟穩定,爬蟲是一個典型的多任務處理情境,請求頁面時會有較長的延遲,總體來說更多的是等待。多線程或進程會更最佳化程式效率,提升整個系統下載和分析能力。
3.GAE 的支援,當初寫爬蟲的時候剛剛有 GAE,而且只支援 Python ,利用 GAE 建立的爬蟲幾乎免費,最多的時候我有近千個應用執行個體在工作。

缺點:
1.對不規範 HTML 適應能力差:舉個例子,如果一個頁面裡面同時有 GB18030 字元集的中文和 UTF-8 字元集的中文,Python 處理起來就沒有 PHP 那麼簡單,你自己需要做很多的判斷工作。當然這是提取本文時的麻煩。

Java 和 C++ 當時也考察過,相對指令碼語言比較麻煩,所以放棄。

總之,如果開發一個小規模的爬蟲指令碼語言是個各方面比較有優勢的語言。如果要開發一個複雜的爬蟲系統可能 Java 是個增加選項, C++ 我感覺寫個模組之類的更加適合。對於一個爬蟲系統來說,下載和內文解析只是基本的兩個功能。真正好的系統還包括完善的任務調度、監控、儲存、頁面資料儲存和更新邏輯、排重等等。爬蟲是一個耗費頻寬的應用,好的設計會節約大量的頻寬和伺服器資源,並且好壞差距很大。update:2016-02-12
curl http://www.topit.me/|grep -P "http:[^>]*?(jpg|gif)" -o|xargs wget
這就是一個正則搜尋url中以http開頭 jpg或gif結尾的字串,使用wget下載的例子

2015-02-22 原答案:
寫過一個爬圖片的程式,使用的shell,加到crontab裡面
大概是curl | grep | wget 一句話
是不是更簡單?反對 @Kenneth ,他見過的爬蟲太少了

首先取決於目的

如果是一個網站,單一目的,用習慣的語言寫吧,學別的語言用的時間都夠重構兩遍的了。
如果是有100左右的網站,做個架構,把你的爬蟲管理起來,比起怎麼寫更重要。
ok,以上兩個都是 “手動” 寫模板的(當然,我們會有一些小外掛程式等協助工具輔助)。手動寫模板的好處是:當網站不多的時候——快,靈活。在這樣的情境和目的下,選擇你習慣的語言,有最多頁面解析和 HTTP 要求支援的庫的語言最好。比如 python,java。
注意,這麼選擇的唯一原因是啟動成本高於編寫成本

當你面臨的是1000個網站這個量級的時候,可能你需要編寫一個模板產生器,比如 Kimono : Turn websites into structured APIs from your browser in seconds
當你面臨的是 1w 個網站以上,但是是同一類型的網站,可能你需要自動模板挖掘。
在這個階段, 演算法更重要,所以代碼編寫的便利程度決定你的選擇。當然,當演算法穩定之後,就變成下面那個問題了。

當你面臨的是每天幾十億的網頁,來一次全量計算算一周,每個頁面需要提取標題,主圖,發布時間,網頁分塊,頁麵價值。不可能有人給他們寫“指令碼”,配模板。大量的建樹,分詞,機器學習,打分,follow 連結品質預測,篩選。佔用大量的計算。
這個階段, 計算速度就非常重要了,除非你能說服老大,給你加幾千台機器。相對於這樣的需求,重新編寫所有基礎組件都可以。語言的選擇就會選擇執行速度快的了。

需要說明的一點是,靈活度,或者說抽取準確性,從上到下是依次遞減的。PM也不會要求你能對幾百億的網站準確抽取每個欄位對吧。


最後說一下抓取的問題。調度抓取對於每個爬蟲都是必要的,但卻沒什麼好說的,不同量級自然有不同的做法,但是這樣的系統一般目的明確,少包依賴,不需要你不斷修改。並且在架構中,往往可以是獨立組件,和下遊是不同語言都行,愛用什麼寫用什麼寫。。
對於機房頻寬來說,下行基本是沒人用的,只要你和對方網站願意,抓取速度不是瓶頸。反而,計算對方壓力,篩選重複,高質連結更重要。而這又反過來帶來了計算的壓力。爬蟲這種應用,看的不是單機的代碼執行速度,看的是開發效率和工具便捷性。所以語言越簡單越好。就像 @kenneth 所說的。開發效率很重要。因為爬蟲的具體代碼得根據網站不同而修改的,而Python這種靈活的指令碼語言特別適合這種任務。
同時Python還有強大的爬蟲庫比如Scrapy。用Java寫過,語言笨重,所建立的資料模型的任何修改都會導致代碼大量變動,所以有些麻煩。
不過有個項目的一部分底層工具是耙梳頁,再封裝一個業務層出來。業務厚重到這種程度,用Java就很舒服了。這個要看你的具體業務吧。以前為了一個爬蟲任務,被爬的對象全是動態渲染的(某博就是這樣喪心病狂),於是就要找一個無介面瀏覽器,經過選擇PhantomJS最合適,所以就採用了JavaScript。沒人說下nodejs嗎?配合cheerio 簡單方便,一般簡單用用夠了。天生非同步,爬起來也很快。python. 爬蟲模組最豐富.用R語言實現呢?
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.