尝试使用以下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代码?
答案 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.