使用python解析一行html中的段落

时间:2011-11-07 02:00:01

标签: python parsing lxml

鉴于HTML代码的灵活性,解析用户通过浏览器看到的段落似乎是一项非常重要的任务。

目前,我的解决方案并不那么强大:

tree = lxml.etree.fromstring(html, lxml.etree.HTMLParser()) if isinstance(html, basestring) else html 
for skiptag in ('//script', '//iframe', '//style', 
                '//link', '//meta', '//noscript', '//option'):    
    for node in tree.xpath(skiptag):
        node.getparent().remove(node)
paragraphs = lxml.etree.tostring(tree, encoding=unicode, method='text')

我面临的问题主要是如何解决异常(或说自由风格)。

一个很常见的情况是,许多段落都写在HTML中的一行(例如下面的代码)中,我的代码会将它们解析成一个段落。

<p>bla, bla 1.</p><p><u><span class="colored"><strong>bla, bla 2.</strong></span></u></p><p>bla, bla. 3;</p><p>bla, bla. 3</p> 

我的问题是:

  • 有没有什么好方法可以正确解析段落?
  • 在这种特殊情况下,我应该如何优化我的代码以正确地从一行HTML中获取段落,不仅<p>可以代表段落,而且许多其他方式可以应用于自由风格?
  • 任何一般性建议?

2 个答案:

答案 0 :(得分:3)

使用 xpath 方法循环遍历所有段落:

for para in tree.xpath("//p"):
    ...

答案 1 :(得分:1)

查看html2text

它可能不会完全符合您的要求,但它只是一个500行的脚本,因此应该很容易使其适应您的特定需求。