我制作网络抓取工具,但有些网页会重定向到其他网页。我如何获得原始页面重定向的页面?
在某些网站如xtema.com.br中,我可以使用带有getHeaderField(“Location”)方法的HttpURLConnection类获取重定向的URL,但在其他类似visa.com.br中,重定向是使用javascript进行的或其他方式,此方法返回null。
有一些方法可以始终获取页面和重定向的URL吗?没有重定向的原始页面并不重要。
谢谢,抱歉英语不好。
编辑:使用httpConn.setInstanceFollowRedirects(true)来跟踪重定向并返回带有httpConn.getURL的URL,但我有两个问题。
1:如果之前调用httpConn.getDate,httpConn.getURL将仅返回重定向页面的实际url。如果我不这样做,它将在重定向之前返回原始URL。
2:像visa.com.br这样的网站得到答案200,但如果我在网络浏览器中打开,我会看到另一个页面。 例如:我的程序 - visa.com.br - 回答200(没有重定向) web broser - visa.com.br/go/principal.aspx - 我在程序中获得的不同版本的HTML代码
答案 0 :(得分:4)
使用HttpURLConnection
,默认情况下会重定向。
如果您想查看重定向的网址,则必须执行以下操作:
httpConn.setInstanceFollowRedirects( false );
httpConn.connect();
int responseCode = httpConn.getResponseCode();
while ((responseCode / 100) == 3) { /* codes 3XX are redirections */
String newLocationHeader = httpConn.getHeaderField( "Location" );
/* open a new connection and get the content for the URL newLocationHeader */
/* ... */
responseCode = httpConn.getResponseCode();
/* do it until you get some code that is not a redirection */
}
答案 1 :(得分:0)
您无法轻松获得javascript重定向。默认情况下,HttpURLConnection
处理HTTP重定向。您可以做的是,在页面内容中搜索几个关键字:
document.location=
,window.location=
以及.href=
但这并不保证任何事情。人们可能会从外部js文件调用javascript函数,你几乎需要获取资源并解析javascript,我猜你不愿意这样做。
答案 2 :(得分:0)
我最终使用Apache's HTTP client。只是另一种选择。