鉴于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>
我的问题是:
<p>
可以代表段落,而且许多其他方式可以应用于自由风格? 答案 0 :(得分:3)
使用 xpath 方法循环遍历所有段落:
for para in tree.xpath("//p"):
...
答案 1 :(得分:1)
查看html2text。
它可能不会完全符合您的要求,但它只是一个500行的脚本,因此应该很容易使其适应您的特定需求。