2012-02-25 53 views
2

我想從各種網站獲取數據。在堆棧溢出搜索後,我使用crawler4j,因爲許多人提出這一點。下面是我的理解/設計:crawler4J高效設計獲取數據

1. Get sitemap.xml from robots.txt. 
2. If sitemap.xml is not available in robots.txt, look for sitemap.xml directly. 
3. Now, get the list of all URL's from sitemap.xml 
4. Now, fetch the content for all above URL's 
5. If sitemap.xml is also not available, then scan entire website. 

現在,你可以請請讓我知道,是crawler4J能夠做到步驟1,2和3 ??? 請提出任何更好的設計可用(假設沒有飼料可用) 如果是的話,請你指導我如何做。

感謝 Venkat

+0

嗨,有什麼輸入嗎? – topblog 2012-02-25 19:21:34

+0

任何幫助將不勝感激... – topblog 2012-02-26 02:37:59

回答

1

我從來沒有使用crawler4j,所以把我帶一粒鹽意見: 我認爲它可以通過爬蟲來完成,但它看起來像您需要修改一些代碼。具體來說,你可以看看RobotstxtParser.java and HostDirectives.java。您將不得不修改解析器以提取站點地圖並在指令中創建一個新字段以返回sitemap.xml。如果沒有來自sitemap.txt的指令返回,步驟3可以在fetcher中完成。

但是,我不確定你通過檢查sitemap.txt確切得到了什麼:除非你正在尋找特定的東西,否則這似乎是無用的事情。

+0

Thx Lirik。我聽說有些網站會提供sitempap.xml中所有產品網址的列表(robots.txt中提到)。而不是爬行整個網站,我通過它的好選擇去通過sitemap.xml。還有,猜測爬行整個可能給了一些不需要的鏈接(常見問題等...),你說什麼? – topblog 2012-02-27 18:05:00

+0

實際上,我的要求是獲得所有類似於pricegrabber的書籍,手機,筆記本等不同類別URL的列表。 – topblog 2012-02-27 18:07:49

2

Crawler4J無法執行步驟1,2和3,但它對於步驟4和步驟5表現相當好。我的建議是使用Java HTTP Client(例如Http Components 之一)來獲取站點地圖。使用任何Java XML解析器解析XML並將這些URL添加到集合中。然後用你的列表填充你的crawler4j種子:

for(String url : sitemapsUrl){ 
controller.addSeed(url); 
} 
controller.start(YourCrawler, nbthreads);