xpath选择元素并遍历标签
想象一下,我的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()