【发布时间】:2012-02-27 17:14:12
【问题描述】:
我有以下 XPath 来匹配亚马逊页面中的作者姓名:
//div[@class='pTitle']/span[@class='small itemByline'] | //div[@class='pTitle']/span[not(text())]
此 XPath 的第一部分与它匹配得很好,但是页面中的某些项目在具有类 pTitle 的此类 div 之后没有跨度,因此没有可匹配的内容,但我想得到一个 '' 或其他东西,要知道作者没有真正找到,而只是跳过它。我想第二个 XPath 无效,因为它不起作用...
例如,以“A Ditadura”开头的 3 个标题应该为使用我正在构建的 XPath 的作者条目返回 ''。他们不是。它使上述 XPath 返回 179 个项目而不是 209 个。
这是我的 Python 模块 https://github.com/caio1982/Amazon-Wishlist 的代码的一部分(顺便感谢到目前为止所有好的答案,感谢你们,我学会了 XPath)。
为了提供信息,我正在尝试使用 Firefox 的 XPath Checker 扩展,并使用 Python (lxml) 实现它。
听起来类似于How do I return '' for an empty node's text() in XPath?,但我不确定。
我怀疑答案可能是围绕 XPath 轴和某种 [notcontains] 限制?
EDIT1:在 Dimitre 的建议之后稍微改写一下......是否可以使用 –– 如果可以,您是否有一个工作示例 –– Becker 的使用 lxml 的 XPath 方法? p>
EDIT2:示例树和预期结果:
<html>
<body>
<h1>Title</h1>
<p>First Paragraph</p>
<p>Second paragraph: <span>value</span></p>
<p>Third paragraph: <span>value</span></p>
<p>Forth paragraph:</p>
</body>
</html>
XPath //p/span 相应地返回第二和第三段“值”字符串。没关系,但我正在寻找 4 个结果而不是 2 个,如下所示:
None
value
value
None
我知道 //p/span 对此不起作用,因此我正在寻找一些字符串魔术、节点比较或条件等。
【问题讨论】: