1

我有一些包含以下内容的 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章的内容。第 2 章。第 1 章。

但我想得到结果:

第 1 章 第 1 章内容 第 2 章 第 2 章内容

除了递归处理从文档顶部到底部的每个标签之外,还有什么更好的方法吗?

4

2 回答 2

1

你确定这string(/)不会给你想要的答案吗?它与您所拥有的并不完全相同,因为<p><i>Hello</i>!</p>它会给您"Hello!"而不是文档"Hello !",但在大多数情况下,我认为这就是您想要的。

于 2013-07-04T14:34:02.600 回答
0

好像您正在尝试使用set删除重复项。

在python中,a中的元素set是无序的,这意味着从集合中获取元素的顺序取决于实现,因此如果要保留顺序,则不能使用这种删除重复项的方法。

text = " ".join(tree.xpath("//text()"))

在没有重复的情况下会产生预期的结果。

于 2013-07-04T13:51:05.660 回答