我有一些html文件,其中包含以下内容:
<div>Chapter 1. <span>Contents of chapter N1.</span> </div>
<div>Chapter 2. <span>Contents of chapter N2.</span> </div>我试图提取这些标记中包含的文本,并使用xpath '// text ()‘函数:
parser = etree.HTMLParser()
tree = etree.parse(StringIO(html),parser)
text = list(set( tree.xpath('//text()') ))
text = " ".join(text)它很好,只是我想改变提取的顺序。现在,我得到了以下结果:
N1章的内容。N2章的内容。第二章,第一章。
但我想得到的结果是:
第一章第一章的内容第二章第二章的内容。
除了递归处理从文档顶部到底部的每个标记之外,还有其他更好的方法来完成这个任务吗?
发布于 2013-07-04 14:34:02
你确定string(/)不会给你你想要的答案吗?这与您所拥有的不太一样,在文档<p><i>Hello</i>!</p>中,它将为您提供"Hello!"而不是"Hello !",但在大多数情况下,我认为这是您想要的。
发布于 2013-07-04 13:51:05
似乎您正在尝试使用set来删除重复项。
在python中,set中的元素是无序的,这意味着从集合中获取元素的顺序依赖于实现,因此如果要保留顺序,就不能使用这种删除重复元素的方法。
text = " ".join(tree.xpath("//text()"))在没有重复的情况下会产生预期的结果。
https://stackoverflow.com/questions/17471026
复制相似问题