有一个带有gif图像的链接,但是urllib2无法下载它。
import urllib.request as urllib2 uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' try: req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' }) file = urllib2.urlopen(req) except urllib2.HTTPError as err: print('HTTP error!!!') file = err print(err.code) except urllib2.URLError as err: print('URL error!!!') print(err.reason) return data = file.read(1024) print(data)
脚本完成后,数据保持为空。为什么会发生?没有HTTPError,我可以在浏览器控制台中看到有效的gif,HTTP响应的状态为200 OK。谢谢。
您应该检查浏览器发送到服务器的所有标头。
此页面需要两个标题:User-Agent和Cookie
User-Agent
Cookie
如果您DevTools在Chrome或Firefox中使用,则通常会看到浏览器(如果还没有cookie)会首先收到包含cookie的响应,然后302 Moved Temporarily重定向到相同的URL,但包含cookie,然后会收到图像。
DevTools
302 Moved Temporarily
您可以尝试我的cookie,也许它会收到图像。通常,您必须执行两个请求-第一个请求获取cookie,第二个请求(带有cookie)获取图像。
import urllib.request as urllib2 uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' headers = { 'User-Agent': 'Mozilla/5.0', 'Cookie': 'JEB2=583077046E650E2495131DE8FD2F1371', } try: req = urllib2.Request(uri, headers=headers) f = urllib2.urlopen(req) except urllib2.HTTPError as err: print('HTTP error!!!') f = err print(err.code) except urllib2.URLError as err: print('URL error!!!') print(err.reason) data = f.read(1024) print(data)
如果您使用requests模块,那么它将自动完成所有操作,您将不需要两个请求。
requests
import requests uri = 'http://ums.adtechjp.com/mapuser?providerid=1074;userid=AapfqIzytwl7ks8AA_qiU_BNUs8AAAFYqnZh4Q' headers = { 'User-Agent': 'Mozilla/5.0', } r = requests.get(uri, headers=headers) print(r.content)