为什么我不能在维基百科网站上使用urllib2.urlopen?

时间:2012-08-05 05:48:42

标签: python networking network-programming wikipedia

  

可能重复:
  Fetch a Wikipedia article with Python

>>> print urllib2.urlopen('http://zh.wikipedia.org/wiki/%E6%AF%9B%E6%B3%BD%E4%B8%9C').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

2 个答案:

答案 0 :(得分:6)

您需要像提供的那样提供用户代理else you'll get a 403

  

在维基媒体wiki上,如果您不提供User-Agent标头,或者您   提供空的或通用的,您的请求将失败并使用HTTP   403错误。 See our User-Agent policy。其他MediaWiki安装   可能有类似的政策。

所以只需在代码中添加一个用户代理,就可以了。

答案 1 :(得分:1)

尝试下载wget cURL的页面 如果你不能,那么你可能会遇到网络问题 如果可以,那么维基百科可能会阻止某些用户代理。在这种情况下,使用urllib2的add_header来定义自定义用户代理(模仿浏览器请求)。