xpath选择元素并遍历标签

0 投票
2 回答
740 浏览
提问于 2025-04-17 04:22

想象一下,我的HTML代码中的

标签是这样的:

<div class ="summary">
    <p>Best <a class="abch" href="/canvas">canvas</a> abcdefgh <a class="zph" href="/canvas">canvas</a>, I cycle them to garden</p>
</div>

当我执行以下操作时:

site.select('.//*[contains(@class, "summary")]/p/text()').extract()

我只得到

标签里的文本,而链接却消失了。我想提取

标签里的所有数据,还有其他文本数据(比如上面的canvas)。

标签里面可以有任意数量的其他标签,这些标签可能存在,也可能不存在。

有没有什么办法可以提取所有这些数据呢?

2 个回答

0

当这个XPath表达式被计算时

string(.//*[contains(@class, "summary")]/p)

结果是一个字符串,它是所有

标签下的文本节点的内容(按照文档中的顺序)拼接在一起的。

我想这就是你想要的结果。

0

我觉得在p后面加两个斜杠//会对你有帮助。一个斜杠/只会选择直接的子元素,而两个斜杠//则会包括更深层次的元素。因为在a下面的文本节点并不是p的直接子元素,所以它们不会被选中。

site.select('.//*[contains(@class, "summary")]/p//text()').extract()

更新:

回复你的评论:我只能想到这种方法:

for p in site.select('.//*[contains(@class, "summary")]/p'):
    p.select('//text()').extract()

撰写回答