2010-05-29 209 views
2

嘿夥計們,每隔一段時間我都需要自動從網站收集數據任務。有時我需要一個目錄中的一堆URL,有時候我需要一個XML站點地圖(是的,我知道有很多軟件和在線服務)。網絡爬蟲,反饋?

不管怎麼說,跟上我之前的問題,我已經寫了一個可以訪問網站的小webcrawler。

  • 基本爬蟲類,以方便,快捷地與一個網站交互。

  • 覆蓋「doAction(String URL,String content)」來進一步處理內容(例如存儲它,解析它)。

  • Concept允許抓取程序的多線程。所有類實例共享已處理和排隊的鏈接列表。

  • 可以建立一個JDBC連接來存儲鏈接到數據庫中,而不是跟蹤對象中的處理鏈接和排隊鏈接。

  • 但是,目前僅限於一個網站,可以通過添加externalLinks堆棧並根據需要添加到其中來擴展它。

  • JCrawler旨在用於快速生成XML站點地圖或解析網站以獲取所需信息。它輕巧。

這是寫的爬蟲好/體面的方式,提供上述的限制?任何投入將極大地幫助:)

http://pastebin.com/VtgC4qVE - Main.java
http://pastebin.com/gF4sLHEW - JCrawler.java
http://pastebin.com/VJ1grArt - HTMLUtils.java

回答

2

我在公司寫了一個自定義的網絡爬蟲,我遵循類似步驟正如你所提到的,我發現它們是完美的。我想說的唯一附加就是它應該有一個輪詢頻率在一段時間後爬行。

所以它應該遵循「Observer」的設計模式,這樣如果在給定的URL上發現任何新的更新一段時間後就會更新或寫入文件。

+0

謝謝你的回答。什麼是投票?蜘蛛本身並沒有連續運行,但我想我可以通過一些改變來做到這一點;在這種情況下,我完全同意觀察者的設計模式。事實上,我個人可能會在doAction中實現更新的東西。 – 2010-05-29 19:46:56

+0

輪詢只不過是爬行的時間段。讓我們說5分鐘,這意味着每隔5分鐘它就會抓取到一個特定的URL。 – 2010-05-29 20:03:15

5

您的抓取程序似乎無法以任何方式尊重robots.txt,並使用假冒的User-Agent字符串來炫耀,就好像它是網絡瀏覽器。這可能會導致未來的法律糾紛。請考慮到這一點。

+2

「未來」是這裏的關鍵詞。違反robots.txt文件在法庭上從未被認爲是非法的。有一個可貴的小先例,但Wayback Machine在2007年參與了一項可能會引起關注的行動:http://www.theregister.co.uk/2007/07/26/wayback_firm_suit/ – jasonmp85 2010-05-30 00:31:44

+0

然而,大多數網站會標記這樣的網絡爬蟲作爲可疑活動,並可能阻止/禁止它訪問該網站。我強烈建議尊重robots.txt並使用明智的用戶代理字符串,如「JCrawler/1.0 http:// jcrawler.org」,並且*擁有一個網站,您可以在其中公開有關抓取工具的所有詳細信息以及哪些用戶/網站管理員可能期望從這個爬蟲。 – BalusC 2010-05-30 00:36:51

+0

除了@ BalusC的評論,有一個專門的代理意味着你不會僞裝成IE6(所有東西),並說服可憐的不知情的管理員,他們需要繼續支持它。 – kibibu 2010-05-30 08:09:21

0

我建議您將開源JSpider作爲抓取工程的起點,它涵蓋了網絡抓取工具的所有主要問題,包括robots.txt,並且有一個插件方案,可用於應用您自己的任務到它訪問的每個頁面。

這是對JSpider的一個簡短的略微過時的評論。這篇文章的網頁回顧了其他幾個Java spidering應用程序。

http://www.mksearch.mkdoc.org/research/spiders/j-spider/