5

我正在使用谷歌文档进行网络抓取。更具体地说,我使用的是 Google Sheets 内置的 IMPORTXML 函数,在该函数中我使用 XPath 来选择要从中抓取数据的节点。

我要做的基本上是检查是否存在特定节点,如果是,则选择其他一些随机节点。

/*IF THIS NODE EXISTS*/
if(exists(//table/tr/td[2]/a/img[@class='special'])){

   /*SELECT THIS NODE*/ 
   //table/tr/td[2]/a

}
4

2 回答 2

7

您在 XPath 中没有类似的逻辑,但您可能可以做一些您想做的事情。

如果你想选择//table/tr/td[2]/a但只有它有一个img[@class='special'],那么你可以使用//table/tr/td[2]/a[img[@class='special']].

如果您想在其他情况下选择其他节点,您可以合并两条路径(|运算符),并确保每个路径都有一个[]互斥的过滤器(在 内),例如一个是路径,另一个是not()那条路的。我举个例子,但我不确定你想要什么“其他随机节点”……也许你可以澄清一下?

关键是将 XPath 视为一种查询语言,而不是过程语言,因此您需要考虑它们的选择器和过滤器,这是一种与大多数程序员习惯的思考问题的方式截然不同的方式。但是过滤器不需要与选择器特别相关(例如,您可以有一个过滤器开始查看文档的根目录)这一事实导致了一些强大的(如果难以阅读)的可能性。

于 2012-11-27T02:29:32.677 回答
1

使用

/self::node()[//table/tr/td[2]/a/img[@class='special']]
   //table/tr/td[2]/a
于 2012-11-27T14:25:11.853 回答