2009-08-20 72 views
2

我有一個比較簡單的例子。我基本上想要存儲有關各個網站之間鏈接的數據,並且不想限制這些域。我知道我可以使用一些http客戶端庫編寫我自己的抓取工具,但是我覺得我會做一些不必要的工作 - 確保頁面不被檢查多次,計算出如何讀取和使用robots.txt文件,甚至可能試圖使其併發和分發,我相信還有很多其他的東西我還沒有想到。因此我想要一個抓取這些事情的網絡抓取框架,同時允許我指定如何處理這些響應(在我的情況下,只是提取鏈接並存儲它們)。大多數抓取工具似乎認爲您正在爲搜索索引網頁,這並不好,我需要一些可定製的功能。可擴展/可定製的Web爬網引擎/框架/庫?

我想將鏈接信息存儲在MongoDB數據庫中,所以我需要能夠指定鏈接如何存儲在框架中。雖然我將這個問題標記爲與語言無關,但這也意味着我必須將選擇限制在MongoDB支持的語言之一(Python,Ruby,Perl,PHP,Java和C++)中,這是一個非常寬網。我更喜歡動態語言,但我願意接受任何建議。

我已經能夠找到Scrapy(看上去整潔)和JSpider(這看起來不錯,但也許有點太「重型」,基於121頁的用戶手冊),但我想看看是否有是我失蹤的其他很好的選擇。

+1

關於JSpider提的是,最後一個版本從2003年根據http://j-spider.sourceforge.net/news.html莖它可能是值得,再加上這個論壇條目暗示事實上項目過多死亡:HTTP:/ /sourceforge.net/forum/message.php?msg_id=5600799;這不一定是顯示塞但我個人會是十分勉強地建立在這個當今頂級的解決方案 - 所有網絡正在發生變化非常快,儘管其穩定和成熟的基礎協議和機制之後。 – 2009-08-23 16:42:23

回答

6

我想你已經搜索過堆棧溢出了,因爲在那些標記爲web-crawler的標記中有很多相似的問題嗎?已經使用沒有廣泛以下我從制定避免,只是列舉一些我覺得值得手頭審查任務:

  • 的Python
  • 紅寶石(根本就不會使用這些)
  • 的Perl
  • 的Java
    • Nutch:相當成熟的項目,有據可查的,專用的可擴展性,基於Apache Lucene,這是非常成熟的,具有很強的社會;仍然存在關於高級集成方案的問題,請參閱this question
    • Heritrix:非常成熟的項目,有據可查的,專用的可擴展性,在Internet Archive的骨幹;似乎更好地解決了一些高級集成方案,請參見this question

嗯,好運氣的審查;)

0

您也可以嘗試用Node.js的PhantomJS CasperJS

0

StormCrawler不在身邊,當有人問這個問題,但會完全適合該法案。它在Java中是高度模塊化和可擴展的,並且可以被定製爲完成上面描述的內容。