在 Python3 中解析 HTML 的帮助,xml.etree.ElementTree 无法处理的格式

4 投票
3 回答
1666 浏览
提问于 2025-04-16 11:44

我总是遇到标签不匹配的错误,真是烦人。我不太明白为什么会这样,毕竟我在craigslist的首页上看到的内容看起来没问题,但我可能没有仔细检查过。有没有什么更宽容的工具可以用,还是说用标准库进行HTML解析就是我能找到的最好选择?

3 个回答

0

解析HTML(超文本标记语言)并不是一件简单的事情,使用一些库可以帮助我们解决这个问题。现在有两个常用的库可以用来解析那些格式不太规范的HTML,分别是BeautifulSoup和lxml。

lxml支持Python 3,它的HTML解析器能够很好地处理那些不太规则的HTML。这个库非常棒,速度也很快,因为它底层使用了C语言的库。我非常推荐使用它。

BeautifulSoup 3.1也支持Python 3,但被认为是一个“失败的实验”,所以不建议使用。因此,实际上BeautifulSoup目前还不支持Python 3,这就让lxml成为了唯一的选择。

1

解析那些不太规整的HTML网页,最好的工具就是BeautifulSoup。下面是项目页面上的一句话:

你并不是写了那个糟糕的网页。你只是想从中提取一些数据。现在,你其实并不在乎HTML应该是什么样子的。

这个解析器也不在乎。

不过,它对Python 3的支持不是很好,关于这一点的更多信息可以在链接的最后找到。

4

标签不匹配的错误通常是因为标签没有正确配对。浏览器很宽容,能接受一些不太规范的HTML代码,这让网页开发者在写代码时容易出现问题,所以这样的情况很多。我们不能指望craigslist这样的网页就能避免这些糟糕的网页设计。

你需要使用一种允许这些不匹配的语法。如果你用的解析器不允许你适当地重新定义语法,那你就没办法了。(可能有更好的Python库可以解决这个问题,但我不太清楚)。

一种替代方案是使用像Tidy这样的工具来处理网页,这个工具可以清理这些不匹配的地方,然后再用你的解析器去处理清理过的内容。

撰写回答