BeautifulSoup
类似浏览器,是个具有启发性的类,可以尽可能的推测HTML文档作者的意图。
但是XML没有固定的标签集合,因此这些启发式的功能没有作用。因此 BeautifulSoup
处理XML不是很好。
使用BeautifulStoneSoup
类剖析XML文档。它是一个
概括的类,没有任何特定的XML方言已经简单的标签内嵌规则。
下面是范例:
from BeautifulSoup import BeautifulStoneSoup xml = "<doc><tag1>Contents 1<tag2>Contents 2<tag1>Contents 3" soup = BeautifulStoneSoup(xml) print soup.prettify() # <doc> # <tag1> # Contents 1 # <tag2> # Contents 2 # </tag2> # </tag1> # <tag1> # Contents 3 # </tag1> # </doc>
BeautifulStoneSoup
的一个主要缺点就是它不知道如何处理自结束标签 。
HTML 有固定的自结束标签集合,但是XML取决对应的DTD文件。你可以通过传递selfClosingTags
的参数的名字到 BeautifulStoneSoup
的构造器中,指定自结束标签:
from BeautifulSoup import BeautifulStoneSoup xml = "<tag>Text 1<selfclosing>Text 2" print BeautifulStoneSoup(xml).prettify() # <tag> # Text 1 # <selfclosing> # Text 2 # </selfclosing> # </tag> print BeautifulStoneSoup(xml, selfClosingTags=['selfclosing']).prettify() # <tag> # Text 1 # <selfclosing /> # Text 2 # </tag>