xpath选择元素并迭代标记

时间:2011-10-15 09:45:35

标签: python xpath hyperlink extract

考虑我的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的文本,超链接丢失了。 我想提取

的数据以及(例如上面的画布)的文本数据。

元素中可以有任意数量的标签。它们可能存在也可能不存在于

标记内。

知道如何提取整个数据。

2 个答案:

答案 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所有文本节点后代的串联(按文档顺序)。

我想这就是你想要的。