考虑我的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()
我只得到p的文本,超链接丢失了。 我想提取
的数据以及(例如上面的画布)的文本数据。
元素中可以有任意数量的标签。它们可能存在也可能不存在于
标记内。
知道如何提取整个数据。
答案 0 :(得分: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()
答案 1 :(得分:0)
评估此XPath表达式时:
string(.//*[contains(@class, "summary")]/p)
结果是一个字符串,它是 p
所有文本节点后代的串联(按文档顺序)。
我想这就是你想要的。