1

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

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

page.getWebURL().getParentUrl();用来获取父网址。

例如http://telegraph.feedsportal.com/c/32726/f/568297/s/18b0dd9a/l/0L0Stelegraph0O0Cculture0Cmusic0Cmusic0Enews0C87789850CNeil0EYoung0Eto0Erelease0Eautobiography0Bhtml/story01.htm和 doc 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 父页面 null

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

}
4

1 回答 1

1

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

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

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

更改此行为通常会导致一些可能的问题,但在我们的例子中,因为我们只抓取单个页面,而不是通过页面链接执行长深度搜索,所以 parentDocId 和 parentURL 永远不会被使用。

考虑到这些信息,我能够找到解决方案。

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

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

使用此代码,每当处理新页面时,parentUrl最初将设置为null,但现在将设置为当前页面的 url。如前所述,当一个重定向页面被添加到队列中时,它parentUrl被设置parentUrl为被重定向的页面,因此在处理重定向页面时,parentUrl它已经被设置,所以它不会被改变。

现在,当您在visit()方法或其他任何地方处理页面时,您将能够从parentUrlpages中提取原始 url WebUrl

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

于 2013-07-09T02:48:33.533 回答