【问题标题】:why can't I use urllib2.urlopen for wikipedia site? [duplicate]为什么我不能将 urllib2.urlopen 用于维基百科站点? [复制]
【发布时间】:2012-08-05 05:48:41
【问题描述】:

可能重复:
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

【问题讨论】:

标签: python networking network-programming wikipedia


【解决方案1】:

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

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

所以只需在您的代码中添加一个用户代理,它应该可以正常工作。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不需要模仿浏览器请求,只需使用自定义用户代理即可。我在使用用户代理“elssar-at-elssar-laptop”时得到了结果。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2012-09-19
    • 2016-08-16
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    相关资源
    最近更新 更多