HTTP错误406:不可接受的Python urllib2

时间:2016-01-16 22:43:11

标签: python python-2.7 urllib2

我使用下面的代码收到以下错误。

  

HTTP错误406:不可接受的Python urllib2

这是我使用beautifulsoup解析页面之前的第一步。

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = "http://www.choicemoney.us/retail.php"
response = opener.open(url)

所有人都非常感谢。

2 个答案:

答案 0 :(得分:5)

  

请求标识的资源只能生成      具有不可接受的内容特征的响应实体      根据请求中发送的接受标头。 [RFC2616]

根据代码和RFC描述的内容,我假设您需要正确设置User-Agent标头的密钥和值。

这些是正确的例子:

  • Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11

  • Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36

  • Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A

只需替换以下内容。

opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A')]

答案 1 :(得分:1)

我相信@ ipinak的答案是正确的。

urllib2实际上提供了一个适用于此处的默认用户代理,因此如果您删除opener.addheaders = [('User-agent', 'Mozilla/5.0')],则响应的状态代码应为200.

我建议使用流行的requests库进行此类工作,因为它的API更易于使用。

url = "http://www.choicemoney.us/retail.php"
resp = requests.get(url)
print resp.status_code # 200
print resp.content # can be used in your beautifulsoup.