如何在Python中将HTML字符串解析为HTML DOM元素?

时间:2013-09-10 05:17:06

标签: jquery python html dom

我有一串HTML元素

HTMLstr = """
    <div class='column span4 ui-sortable' id='column1'></div>
    <div class='column span4 ui-sortable' id='column2'>
        <div class='portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all' id='widget_basicLine'>
        <div class='portlet-header ui-widget-header ui-corner-all'><span class='ui-icon ui-icon-minusthick'></span>Line Chart </div>
        <div class='portlet-content' id=basicLine style='height:270px; margin: 0 auto;'></div>          
        </div>
    </div>
    <div class='column span4 ui-sortable' id='column3'></div> """

我想将上面的HTML字符串转换为python中的各个HTML DOM元素?

我可以通过$(this).html(HTMLstr);在jQuery / AJAX函数中完成它但是如何在python中解析它?

2 个答案:

答案 0 :(得分:4)

Python具有用于解析HTML文档的内置库。在Python 2.x中,您可以选择HTMLParser(推荐)和htmllib(不建议使用);在Python 3.x中,html.parser是相应的库(这是Python 2.x中重命名的HTMLParser版本。)

但是,这些是事件驱动的解析器(类似于XML SAX解析器),可能不是您想要的。如果您知道文档将是有效的XML(即标签正确关闭等),则可以使用Python的XML解析工具之一。库xml.domxml.dom.minidom都是选项,具体取决于您要查找的解析类型(我怀疑xml.dom.minidom足以满足您的目的,给出您的示例)。

例如,您应该能够在Python控制台中输入它并获得显示的输出:

>>> import xml.dom.minidom
>>> x = xml.dom.minidom.parseString('<div class="column span4 ui-sortable" id="column2"><div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" id="widget_basicLine" /></div>')
>>> x.documentElement.nodeName
'div'
>>> x.documentElement.getAttribute("class")
'column span4 ui-sortable'
>>> len(x.documentElement.firstChild.childNodes)
0

您收到的Node对象的完整描述可用here。如果您习惯在JavaScript中使用DOM,则应该发现大多数属性都是相同的。请注意,因为Python将其视为XML文档,所以特定于HTML的属性(如“class”)没有特殊意义,因此我认为您必须使用getAttribute函数来访问它们。

答案 1 :(得分:1)

你应该使用BeautifulSoup - 完全符合你的需要。

http://www.crummy.com/software/BeautifulSoup/