【问题标题】:Get webpage contents with Python?用 Python 获取网页内容?
【发布时间】:2010-12-23 00:57:40
【问题描述】:

我正在使用 Python 3.1,如果有帮助的话。

无论如何,我正在尝试获取this 网页的内容。我用谷歌搜索了一下,尝试了不同的方法,但没有奏效。我猜这应该是一件容易的事,但是……我做不到。 :/。

urllib、urllib2的结果:

>>> import urllib2
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import urllib2
ImportError: No module named urllib2
>>> import urllib
>>> urllib.urlopen("http://www.python.org")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    urllib.urlopen("http://www.python.org")
AttributeError: 'module' object has no attribute 'urlopen'
>>> 

Python 3 解决方案

谢谢你,杰森。 :D。

import urllib.request
page = urllib.request.urlopen('http://services.runescape.com/m=hiscore/ranking?table=0&category_type=0&time_filter=0&date=1519066080774&user=zezima')
print(page.read())

【问题讨论】:

  • 重复:在 SO 中搜索 urlib2get web page [python],您会发现 100 个类似的问题。
  • 试过 urllib2 和 urllib,但都不起作用。 (编辑第一篇文章)
  • 他使用的是 Python 3,所以 API 不同。通过研究这个答案,我肯定学到了一些新东西。
  • @Andrew:仔细检查问题和答案以查看他们是否说 Python 3 会有所帮助。如果他们不说 Python 3,他们就不适用​​于你。
  • 对于寻找 python 2 的任何人,请参阅stackoverflow.com/q/2289768/79125(使用 urllib.urlopen)

标签: python python-3.x


【解决方案1】:

如果你正在编写一个从 PyPI 安装包的项目,那么最好和最常用的库是 requests。它提供了许多方便但强大的功能。像这样使用它:

import requests
response = requests.get('http://hiscore.runescape.com/index_lite.ws?player=zezima')
print (response.status_code)
print (response.content)

但是,如果您的项目没有安装自己的依赖项,即仅限于标准库内置的东西,那么您应该咨询其他答案之一。

【讨论】:

    【解决方案2】:

    由于您使用的是 Python 3.1,因此您需要使用新的Python 3.1 APIs

    试试:

    urllib.request.urlopen('http://www.python.org/')
    

    或者,您似乎正在使用 Python 2 示例。用 Python 2 编写,然后使用 2to3 工具进行转换。在 Windows 上,2to3.py 位于 \python31\tools\scripts 中。谁能指出在其他平台上哪里可以找到 2to3.py?

    编辑

    这些天,我使用六个来编写 Python 2 和 3 兼容的代码。

    from six.moves import urllib
    urllib.request.urlopen('http://www.python.org')
    

    假设您安装了六个,它们在 Python 2 和 Python 3 上都运行。

    【讨论】:

    • 我在 Windows 上。无论如何,谢谢,它工作得很好。 (顺便说一句,你链接到我的页面看起来很有帮助。特别感谢。)
    • 在 Ubuntu 上,它在路径中,所以我只需要运行 2to3 命令。 Whereis 说它在/usr/bin/2to3
    • 该死,python 3 开始成为一个问题:不能只是复制粘贴第一个堆栈溢出答案并期望它继续工作!
    • @xApple:在我看来,Python 2 开始成为问题;)
    • 如果您的代码必须同时在 python 2 和 python 3 下工作,使用 'six' 是一个好主意。只有在编写一个供他人使用的库时才会出现这种情况(即使那样,关心 python2 越来越少了,)如果您正在编写可执行脚本或应用程序,尤其是供自己使用,您可以选择 python3 或 python2 之一,并专门使用它,而不会出现“六”引入的复杂情况。
    【解决方案3】:

    如果你问我。试试这个

    import urllib2
    resp = urllib2.urlopen('http://hiscore.runescape.com/index_lite.ws?player=zezima')
    

    并以正常方式阅读,即

    page = resp.read()
    

    祝你好运

    【讨论】:

      【解决方案4】:

      Mechanize 是一个很棒的包,用于“像浏览器一样”,如果你想处理 cookie 状态等。

      http://wwwsearch.sourceforge.net/mechanize/

      【讨论】:

        【解决方案5】:

        您可以使用 urlib2 并自己解析 HTML。

        或者尝试 Beautiful Soup 为你做一些解析。

        【讨论】:

        • 试过 urllib2 和 urllib,但都不起作用。 (编辑第一篇文章)
        • 安德鲁,如果您详细描述您的尝试以及导致的错误消息/意外行为,其他人可以更好地帮助您。
        • 我将它编辑到我的初始帖子中,因为我不想要一个巨大的评论。 :P.
        【解决方案6】:

        您也可以使用faster_than_requests 包。这非常快速和简单:

        import faster_than_requests as r
        content = r.get2str("http://test.com/")
        

        看看这个对比:

        【讨论】:

          【解决方案7】:

          适用于 Python 2.X 和 Python 3.X 的解决方案:

          try:
              # For Python 3.0 and later
              from urllib.request import urlopen
          except ImportError:
              # Fall back to Python 2's urllib2
              from urllib2 import urlopen
          
          url = 'http://hiscore.runescape.com/index_lite.ws?player=zezima'
          response = urlopen(url)
          data = str(response.read())
          

          【讨论】:

            【解决方案8】:

            假设您想要获取网页的内容。下面的代码做到了:

            # -*- coding: utf-8 -*-
            # python
            
            # example of getting a web page
            
            from urllib import urlopen
            print urlopen("http://xahlee.info/python/python_index.html").read()
            

            【讨论】:

              猜你喜欢
              • 2014-08-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-11-05
              • 2010-11-06
              • 1970-01-01
              • 1970-01-01
              • 2019-07-19
              相关资源
              最近更新 更多