能否在BeautifulSoup中将所有XML标签转换为小写
在使用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
的元素,不管它们的大小写。