2

尝试使用以下 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 没有发生的重定向操作。我正在使用用户代理标头来尝试获取典型浏览器的行为,但我没有运气。

如何获得与浏览器相同的 html 代码?

4

1 回答 1

1

我认为您可以运行以下命令:

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.
于 2012-12-10T14:08:48.227 回答