代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

Python的“urllib2”:为什么在打开Wikipedia页面时出现错误403?

  •  49
  • Ram Rachum  · 技术社区  · 14 年前

    我在试着 urlopen

    http://en.wikipedia.org/wiki/OpenCola_(drink)

    这是shell会话:

    >>> f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)')
    Traceback (most recent call last):
      File "C:\Program Files\Wing IDE 4.0\src\debug\tserver\_sandbox.py", line 1, in <module>
        # Used internally for debug sandbox under external interpreter
      File "c:\Python26\Lib\urllib2.py", line 126, in urlopen
        return _opener.open(url, data, timeout)
      File "c:\Python26\Lib\urllib2.py", line 397, in open
        response = meth(req, response)
      File "c:\Python26\Lib\urllib2.py", line 510, in http_response
        'http', request, response, code, msg, hdrs)
      File "c:\Python26\Lib\urllib2.py", line 435, in error
        return self._call_chain(*args)
      File "c:\Python26\Lib\urllib2.py", line 369, in _call_chain
        result = func(*args)
      File "c:\Python26\Lib\urllib2.py", line 518, in http_error_default
        raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 403: Forbidden
    

    这发生在我身上的两个不同的系统在不同的大陆。有人知道为什么会这样吗?

    6 回复  |  直到 14 年前
        1
  •  130
  •   mischva11 Jochen Ritzel    5 年前

    Wikipedias stance is :

    数据检索:不能使用bot 检索大量内容以供任何使用 从其他网站加载页面, 这可能会导致网站 进入。如果你想下载 批量内容或镜像项目, 你自己的数据库。

    这就是Python被阻塞的原因。你应该 download data dumps .

    req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
    con = urllib2.urlopen( req )
    print con.read()
    

    或者在Python 3中:

    import urllib
    req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"}) 
    con = urllib.request.urlopen( req )
    print(con.read())
    
        2
  •  11
  •   S.Lott    14 年前

    try:
        f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)')
    except urllib2.HTTPError, e:
        print e.fp.read()
    

    “英语

    我们的服务器目前正在经历 一个技术问题。这可能是 暂时的,应该很快修复。 请几分钟后再试。”

        4
  •  1
  •   Chris Foster    14 年前

    一些网站会通过读取urllib发送的头文件来阻止脚本的访问,以避免“不必要的”服务器使用。我不知道也无法想象维基百科为什么会这么做,但你有没有尝试过欺骗你的邮件头?

        5
  •  1
  •   Hello World    11 年前

    正如JochenRitzel提到的,维基百科阻止了机器人程序。

    http://en.wikipedia.org/w/api.php?format=json&action=query&titles=love&prop=revisions&rvprop=content

        6
  •  0
  •   Phil    7 年前

    我用php解决了这个问题,它没有被我需要的站点阻止。

    可以这样访问:

    path='http://phillippowers.com/redirects/get.php? 
    file=http://website_you_need_to_load.com'
    req = urllib2.Request(path)
    response = urllib2.urlopen(req)
    vdata = response.read()