我正在使用最新版本的Crawler4j来爬行一些提要URL。我已经传递了一些种子URL以及doc ID,并且我也将深度设置为零,因为我只想要该页面的内容。

问题是我无法获得这些种子URL的parentdocid和父URL。我想知道与原始URL关联的重定向URL。

我正在使用page.getWebURL().getParentUrl();来获取父URL。

例如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

任何人都有类似的问题吗?

我再次尝试使用不同的URL,但结果仍然相同。
    controller.addSeed(“ feeds.reuters.com/~r/reuters/bankruptcyNews/~3/es0kEUT8gI0 /”,321);

输出:-

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());*/

}

最佳答案

我知道这是一个古老的问题,但是最近我正在处理相同的问题,所以我认为我会提出解决方案,以防其他人一起寻找解决方案。

基本上,不应将在重定向页面上设置的parentURL和parentDocId设为原始页面的URL和DocId,而应将它们设置为原始页面的parentURL和parentDocId。

这是因为parentURL和parentDocId应该表示当前页面的链接页面,而不是重定向页面的页面。

更改此行为通常可能会导致一些可能的问题,但是在我们的情况下,因为我们仅爬网单个页面,并且不通过页面链接执行长时间深度搜索,因此永远不会使用parentDocId和parentURL。

有了这些信息,我便找到了解决方案。

只需覆盖WebCrawler的handlePageStatusCode()方法并添加以下行:

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


使用此代码,无论何时处理新页面,parentUrl最初都将设置为null,但是现在它将被设置为当前页面的url。如前所述,当将重定向页面添加到队列中时,其parentUrl设置为要从中重定向页面的parentUrl,因此,在处理重定向页面时,parentUrl已被设置为它不会被改变。

现在,当您使用visit()方法或其他方法处理页面时,将能够从页面parentUrlWebUrl中提取原始URL。

希望这些信息可以帮助某人!

关于java - 在网址重定向中,Crawler4j将null设置为parentURL,将零设置为parentDocID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11289004/

10-10 01:52