我正在使用最新版本的Crawler4j来抓取一些供稿网址。我已经传递了一些种子URL以及文档ID,我也将深度设置为零,因为我只想要该页面的内容。
问题是我无法获取这些种子URL的parentdocid和父URL。我想知道与原始网址相关联的重定向网址。
我正在使用page.getWebURL().getParentUrl();
来获取父网址。
有关详细说明http://code.google.com/p/crawler4j/issues/detail?id=163
任何人都有类似的问题吗?
我已尝试使用不同的网址,但结果仍然相同。 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());*/
}
答案 0 :(得分: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
,因此在处理重定向页面时,{{1}已经设置好了,所以不会改变。
现在,当您使用parentUrl
方法或其他任何地方处理页面时,您将能够从页面visit()
的{{1}}中提取原始网址。
希望这些信息可以帮助别人!