获取重定向到其他网页的网页内容

时间:2017-06-04 02:19:17

标签: java jsoup crawler4j

我想抓取网页的内容 - http://www.pgmfi.org/。但是,如果我们访问该页面,我们会看到它重定向到该页面 - http://twiki.pgmfi.org/bin/view

当我尝试使用jsoupcrawler4j抓取网址(http://www.pgmfi.org/)中的内容时,我收到了以下内容。

Looking for PGMFI.ORG Home ? Please wait redirecting to: http://twiki.pgmfi.org

但我希望从重定向的网页(http://twiki.pgmfi.org/bin/view)获取有关该网页的更多信息。当我使用jsoup运行简单代码时,我发现了以下内容。

String url = "http://www.pgmfi.org/";

Response response = Jsoup.connect(url).followRedirects(false).execute();
System.out.println(response.statusCode() + " : " + response.url());

//check if URL is redirect?
System.out.println("Is URL going to redirect : " + response.hasHeader("location"));
System.out.println("Target : " + response.header("location"));

输出:

200 : http://www.pgmfi.org/
Is URL going to redirect : false
Target : null

因此,重定向显然不是直截了当的。我的问题 - 有没有办法,我可以获取页面重定向的URL而无需解析html正文?

我更喜欢使用crawler4j的解决方案。即使jsoup中的解决方案也适合我。

1 个答案:

答案 0 :(得分:1)

crawler4j不支持从meta-refresh中提取网址。但是,crawler4j提供了相应的元标记(请参阅HTMLParseData),因此您可以增强visit(...)方法,将提取的网址添加到{{1}中的Frontier对象中通过WebCrawler

但是,schedule(...)Frontier中只有private次访问权限,因此不适用于您的具体子类。为了修改它,你需要(a)分叉它或(b)使用Reflection API来改变访问修饰符。

另一种方法是在官方问题跟踪器here上打开一个问题。