我们可以在Beautifulsoup中将所有XML标记转换为小写

时间:2013-02-21 14:37:59

标签: python xml python-3.x beautifulsoup

使用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 个答案:

答案 0 :(得分:4)

不要使用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。然后,您必须使用regular expression XPath search

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

将查找名称为head的所有元素,不区分大小写。