2012-07-02 43 views
1

我正在使用最新版本的Crawler4j來抓取某些供稿網址。我已經傳遞了一些種子URL以及文檔ID,並且我還將深度設置爲零,因爲我只想要該頁面的內容。Crawler4j將null作爲parentURL,並將其作爲parentDocID在URL重定向中爲零

問題是我無法獲取這些種子URL的parentdocid和父URL。我想知道與原始網址關聯的重定向網址。

我使用page.getWebURL().getParentUrl();來獲取父網址。

例如http://telegraph.feedsportal.com/c/32726/f/568297/s/18b0dd9a/l/0L0Stelegraph0O0Cculture0Cmusic0Cmusic0Enews0C87789850CNeil0EYoung0Eto0Erelease0Eautobiography0Bhtml/story01.htm和文檔ID是10

更詳細的說明http://code.google.com/p/crawler4j/issues/detail?id=163

任何人有類似的問題?

我再次嘗試使用不同的網址,但結果仍然相同。 controller.addSeed(「feeds.reuters.com/~r/reuters/bankruptcyNews/~3/es0kEUT8gI0 /」,321);

OUTPUT: -

ParentDocId 0 的DocID 322 父頁空

UPDATE:-------- 

我通過crawler4j代碼去了,暫時固定我的問題。

-------- PageFetcher.java --------- 

if (header != null) { 

String movedToUrl = header.getValue(); 
movedToUrl = URLCanonicalizer.getCanonicalURL(movedToUrl, toFetchURL); 
fetchResult.setMovedToUrl(movedToUrl);                
webUrl.setParentUrl(webUrl.getURL()); //My Custom Code to add Parent URL. 
/*This won't work due to collision with next    
document ID which needs to be unique. 
webUrl.setParentDocid(webUrl.getDocid());*/ 

} 
+0

感謝您加入JAVA。 – Pratik

回答

1

我知道這是一個老問題,但我正在處理同樣的問題,最近,所以我想我會把我的解決方案了,以防其他人一起去尋找一個解決方案。

基本上,在重定向頁面上設置的parentURL和parentDocId不應該是原始頁面的URL和DocId,它們將設置爲原始頁面的parentURL和parentDocId。

這是因爲parentURL和parentDocId應該表示當前頁面鏈接的頁面,而不是它從其重定向的頁面。

更改此行爲通常會導致一些可能的問題,但在我們的情況下,由於我們只是抓取單個頁面,並且沒有通過頁面鏈接執行長時間深度搜索,所以parentDocId和parentURL將永遠不會被使用。

考慮到這些信息,我能夠找到解決方案。

只需覆蓋的WebCrawler的handlePageStatusCode()方法,並添加以下行:

if (webUrl.getParentUrl() == null) { 
    webUrl.setParentUrl(webUrl.getURL()); 
} 

有了這個代碼,每當一個新的頁面被處理的parentUrl最初將設置爲null,但現在它將被設置到當前頁面的網址。如前所述,當重定向頁面被添加到隊列中時,其parentUrl被設置爲頁面被重定向的parentUrl,因此當處理重定向頁面時,parentUrl已經被設置,所以它不會被改變。

現在,當您在visit()方法或其他地方處理頁面時,您將能夠從WebUrl頁的parentUrl中提取原始URL。

希望這些信息可以幫助別人!

相關問題