网站重定向到新地址但不发送3XX代码

时间:2014-01-07 10:09:32

标签: http web-crawler redirect

我正在尝试抓取网站“http://www.daxontech.com” 如果我们在网络浏览器中输入上述地址,则地址会自动更改为http://www.benqmaterials.com/index.aspx

我尝试使用响应代码将我的程序重定向到上面的网站,但响应代码是200.有没有办法检索上述地址。我正在使用Jsoup进行爬行。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

您引用的网站使用元重定向,这是在将标头发送到客户端后完成的。

<meta http-equiv="refresh" content="0; url=http://www.BenQMaterials.com/index.aspx">     

这是您正在抓取的网站的错误,如果不在网页中解析元刷新标记(或其他类似的重定向方法)中的html,您可能无法做到这一点

答案 1 :(得分:1)

$ curl "http://www.daxontech.com" -i
HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Tue, 04 Jan 2011 08:47:58 GMT
Accept-Ranges: bytes
ETag: "61cc416ecabcb1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 07 Jan 2014 10:11:11 GMT
Content-Length: 304

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta http-equiv="refresh" content="0; url=http://www.BenQMaterials.com/index.aspx">      
<title>BenQ Materials, the top four manufacturers of polarizer in the world.</title>
</head>
<body>
</body>
</html>

这不是重定向,而是

<meta http-equiv="refresh" content="0; url=http://www.BenQMaterials.com/index.aspx">
  

http-equiv属性为内容属性的信息/值提供HTTP标头。

     

http-equiv属性可用于模拟HTTP响应头。​​

     

refresh:定义文档刷新自身的时间间隔。   例如:

     

<meta http-equiv="refresh" content="300">

     

注意:应谨慎使用值“refresh”,因为它可以控制页面远离用户。使用“刷新”将导致W3C的Web内容可访问性指南失败。

因此您可以使用xpath ("//meta[@http-equiv='refresh']");或使用正则表达式查找字符串<meta http-equiv="refresh"来检查最终位置。

reference