python urllib.request没有得到与我的浏览器相同的HTML

时间:2012-11-21 18:05:28

标签: redirect python-3.x user-agent urllib

尝试使用以下python代码获取http://groupon.cl/descuentos/santiago-centro的html代码:

import urllib.request
url="http://groupon.cl/descuentos/santiago-centro"
request = urllib.request.Request(url, headers = {'user-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'})
response = urllib.request.urlopen(request)
return response.read().decode('utf-8')

我正在获取一个要求我的位置的页面的HTML代码。如果我手动打开与浏览器相同的链接(不涉及任何cookie,即使是最近安装的浏览器),我也会直接进入带折扣促销的页面。似乎是urllib没有发生一些重定向动作。我正在使用user-agent标头尝试获取典型浏览器的行为,但我没有运气。

我怎样才能获得与浏览器相同的HTML代码?

1 个答案:

答案 0 :(得分:0)

我认为你可以运行这个命令:

wget -d http://groupon.cl/descuentos/santiago-centro

您将看到wget打印两个http请求并将响应页面保存到文件中。

 -   HTTP/1.1 302 Moved Temporarily
 -   HTTP/1.1 200 OK

并且该文件的内容是您想要的HTML代码。

第一个响应代码是302,因此urllib.requst.urlopen执行第二个请求。但它没有 设置从第一个响应得到的正确的cookie,服务器无法取消 第二个请求,所以你得到另一个页面。

http.client模块不会自己处理301或302 http响应。

import http

conn = http.client.HTTPConnection("groupon.cl")
#do first request
conn.request("GET", "/descuentos/santiago-centro")
print(conn.status)  # 301 or 302
print(conn.getheaders()) # set-Cookie

#get the cookie
headers = ....
#do second request

conn.requesst("GET", "/", headers)
......
......
#Get response page.