我正在使用最新版本的Crawler4j来抓取一些提要网址。我已经传递了一些种子 URL 以及文档 ID,并且还将深度设置为零,因为我只想要该页面的内容。
问题是我无法获取这些种子 URL 的父文档和父 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
有人遇到类似的问题吗?
我再次尝试使用不同的 URL,但结果仍然相同。 controller.addSeed("feeds.reuters.com/~r/reuters/bankruptcyNews/~3/es0kEUT8gI0/",321);
输出:--
ParentDocId 0文档ID 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 永远不会被使用。
有了这些信息,我能够找到解决方案。
只需覆盖网络爬虫的handlePageStatusCode()
方法并添加以下行:
if (webUrl.getParentUrl() == null) {
webUrl.setParentUrl(webUrl.getURL());
}
使用此代码,每当处理新页面时,parentUrl
最初将设置为 null
,但现在它将设置为当前页面的 url。如前所述,当重定向页面添加到队列时,其parentUrl
设置为重定向页面的parentUrl
,因此在处理重定向页面时,parentUrl
已经设置,因此不会更改。
现在,当您在visit()
方法或其他任何地方处理页面时,您将能够从页面WebUrl
的parentUrl
中提取原始URL。
希望这些信息对某人有所帮助!