BeautifulSoup也可以解析XML文档。你需要向BeautifulSoup构造函数传递features='xml'参数。
假设我们在当前工作目录中有以下名为books.xml
的文件:
<?xml version="1.0" ?>
<books>
<book>
<title>Python</title>
<author>Yoagoa</author>
<price>400</price>
</book>
</books>
以下代码解析给定的XML文件:
from bs4 import BeautifulSoup
fp = open("books.xml")
soup = BeautifulSoup(fp, features="xml")
print(soup)
print('type:', type(soup))
当上述代码被执行时,你应该得到以下结果:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<title>Python</title>
<author>Yoagoa</author>
<price>400</price>
</book>
</books>
type: <class 'bs4.BeautifulSoup'>
XML解析错误
默认情况下,BeautifulSoup包将文档解析为HTML,但是使用beautifulsoup4处理不规范的XML非常方便。
要将文档解析为XML,你需要有lxml解析器,并且只需要将"xml"作为第二个参数传递给BeautifulSoup构造函数:
soup = BeautifulSoup(markup, "lxml-xml")
或者
soup = BeautifulSoup(markup, "xml")
一个常见的XML解析错误是:
AttributeError: 'NoneType' object has no attribute 'attrib'
这种情况可能会发生在使用find()
或findall()
函数时,某些元素缺失或未定义的情况下。