2017-06-04 226 views
1

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

当我尝试使用jsoupcrawler4j从URL(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 

所以,重定向显然不是直线前进。我的问题 - 有什么办法,我可以得到页面重定向到的网址而不解析html正文?

我更喜欢使用crawler4j的解决方案。即使在jsoup的解决方案对我来说也不错。

+0

您需要弄清楚您的scraping库是否支持基于元刷新的重定向。如果没有,请自行解析出来或者从http://twiki.pgmfi.org开始抓取。 – pvg

+0

我不知道为什么我会倒下。我在SO上提出这个问题之前尝试了不同的选择,但失败了。我需要从原始网址抓取重定向的网页,因此我现在不考虑直接从重定向的网址抓取。 –

+0

这是不是很清楚你问什么。也许你不熟悉重定向的类型?严格来说,它不是重定向,而是依赖于解析HTML。 – pvg

回答

1

crawler4j不支持从meta-refresh中提取网址。然而,crawler4j提供了各自的元标记(请参阅HTMLParseData),因此您可以通过schedule(...)增强visit(...)方法以将提取的URL添加到WebCrawler中的Frontier对象。

但是,Frontier只有private访问WebCrawler,因此不适用于具体的子类。为了修改这个,你需要(a)分叉它或者(b)使用Reflection API来改变访问修饰符。

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

相关问题