【问题标题】:How do I get the HTML of a website using Python 3?如何使用 Python 3 获取网站的 HTML?
【发布时间】:2016-11-30 03:39:18
【问题描述】:

我一直在尝试使用 repl.it 执行此操作,并在此站点上尝试了多种解决方案,但都没有奏效。现在,我的代码看起来像

import urllib
url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345"
print (urllib.urlopen(url).read())

但它只是说“AttributeError:模块'urllib'没有属性'urlopen'”。

如果我添加 import urllib.urlopen,它会告诉我没有名为那个的模块。我该如何解决我的问题?

【问题讨论】:

标签: python


【解决方案1】:

您用于 urllib 库的语法来自 Python v2。 Python v3 的库有所改变。新的符号看起来更像:

import urllib.request
response = urllib.request.urlopen("http://www.google.com")
html = response.read()

html 对象只是一个字符串,带有返回的站点 HTML。与原始的 urllib 库非常相似,您不应期望图像或其他数据文件包含在此返回的对象中。

这里令人困惑的部分是,在 Python 3 中,如果这样做会失败:

import urllib
response = urllib.request.urlopen("http://www.google.com")
html = response.read()

据我所知,这种奇怪的模块导入行为符合预期并且可以正常工作。但这是不直观和尴尬的。更重要的是,对您而言,它使情况更难调试。享受吧。

【讨论】:

  • 谢谢,但由于某种原因,它仍然无法在 repl.it 中工作。它只是说“urllib.error.URLError:
  • @K.Michael 如果您没有连接到互联网,这就是您通常会遇到的错误。对不起。不过,这可能是 DNS 服务器的一个更微妙的问题。如果您从 Raspberry Pi 运行代码或通过代理连接到 Internet,则 DNS 很可能是问题所在。
【解决方案2】:

Python3

import urllib
import requests
url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345"
r = urllib.request.urlopen(url).read()
print(r)

import urllib.request
url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345"
r = urllib.request.urlopen(url).read()
print(r)

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2021-03-05
    • 2019-05-03
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多