我正在使用最新版本的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()
方法或其他方法处理页面时,将能够从页面parentUrl
的WebUrl
中提取原始URL。希望这些信息可以帮助某人!
关于java - 在网址重定向中,Crawler4j将null设置为parentURL,将零设置为parentDocID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11289004/