1

可能重复:
使用 Python 获取 Wikipedia 文章

>>> 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
4

2 回答 2

6

您需要提供一个用户代理,否则您将获得 403,就像您所做的那样。

在 Wikimedia wiki 上,如果您不提供 User-Agent 标头,或者您提供空的或通用的标头,您的请求将失败并出现 HTTP 403 错误。请参阅我们的用户代理政策。其他 MediaWiki 安装可能有类似的政策。

因此,只需将用户代理添加到您的代码中,它应该可以正常工作。

于 2012-08-05T06:19:46.547 回答
1

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

于 2012-08-05T06:00:06.297 回答