能否在BeautifulSoup中将所有XML标签转换为小写

1 投票
1 回答
2672 浏览
提问于 2025-04-17 16:38

在使用BeautifulSoup和HTML解析器时,标签会被转换成小写字母。但是如果我们使用LXML解析器,应该怎么做呢?在下面的例子中,我无法打印出结果。但是如果我用HTML解析器来解析,就没问题。有没有人能帮我解决这个问题?

html_doc = """
<html><HEAD><title>The Dormouse's story</title></HEAD>

<p class="title"><b>The Dormouse's story</b></p>
<p class="story">...</p>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, "xml")

print soup.head

1 个回答

5

不要用XML解析器来解析HTML。因为HTML对大小写不敏感,而XML是敏感的。

你可以用lxml来解析HTML,方法很简单,只需要使用HTML模式:

>>> soup = BeautifulSoup(html_doc, "lxml")
>>> soup.head
<head><title>The Dormouse's story</title></head>

如果你坚持要用XML解析器,那你就得确保输入元素的大小写完全匹配:

>>> soup = BeautifulSoup(html_doc, "xml")
>>> soup.head
>>> soup.HEAD
<HEAD><title>The Dormouse's story</title></HEAD>

如果你想处理XML并且不考虑大小写,那就用lxml提供的ElementTree API,完全不要用BeautifulSoup。这样你就需要使用正则表达式的XPath搜索

regexpNS = "http://exslt.org/regular-expressions"
tree.xpath('//*[re:test(., '^head$', 'i')]', namespaces={'re':regexpNS})

这样可以找到所有名称为head的元素,不管它们的大小写。

撰写回答