python - urllib 与 elementtree 结合

标签 python python-3.x urllib elementtree

我在使用标准 Python 库中的 ElementTree 模块解析简单 HTML 时遇到一些问题。这是我的源代码:

from urllib.request import urlopen
from xml.etree.ElementTree import ElementTree

import sys

def main():
    site = urlopen("http://1gabba.in/genre/hardstyle")
    try:
        html = site.read().decode('utf-8')
        xml = ElementTree(html)
        print(xml)
        print(xml.findall("a"))        
    except:
        print(sys.exc_info())

if __name__ == '__main__':
    main()

如果失败,我会在控制台上得到以下输出:

<xml.etree.ElementTree.ElementTree object at 0x00000000027D14E0>
(<class 'AttributeError'>, AttributeError("'str' object has no attribute 'findall'",), <traceback object at 0x0000000002910B88>)

所以当我们查看documentation时,xml确实是一个ElementTree对象。我们将看到 ElementTree 类有一个 findall 函数。额外的事情:xml.find("a") 工作正常,但它返回一个 int 而不是 Element 实例。

有人可以帮我吗?我有什么误解吗?

最佳答案

ElementTree(html) 替换为 ElementTree.fromstring(html),并将导入语句更改为 from xml.etree import ElementTree .

这里的问题是 ElementTree 构造函数不需要字符串作为其输入 - 它需要一个 Element 对象。函数 xml.etree.ElementTree.fromstring() 是从字符串构建 ElementTree 的最简单方法。

鉴于您正在解析 HTML(不一定是有效的 XML),我猜测 XML 解析器并不是您真正想要的此任务。您可能想看看:

关于python - urllib 与 elementtree 结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672448/

相关文章:

python - sys.stdin 的模型?

python - ValueError : Cannot feed value of shape (165, ) 对于张量 'Placeholder_11:0' ,其形状为 '(?, 2)'

python - 如何仅将字符串列表的一部分转换为整数

Python 3.6 urllib 类型错误 : can't concat bytes to str

python - 在 Python 中,为什么可以使用默认参数时使用 "val = param or None'?

javascript - 是否有用于清理 HTML 和删除所有 Javascript 的开源 Python 库?

python - 使用谷歌应用程序从字符串中检索字符

python - 在 Pandas 数据框中使用 pyproj 在投影之间进行转换

python - 发出 HTTP[S] 请求的首选方式

python - Instagram Api 请求被系统拒绝