Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath返回标记在集合中的位置(包含文本)_Xpath_Web Scraping_Google Sheets_Google Sheets Importxml - Fatal编程技术网

Xpath返回标记在集合中的位置(包含文本)

Xpath返回标记在集合中的位置(包含文本),xpath,web-scraping,google-sheets,google-sheets-importxml,Xpath,Web Scraping,Google Sheets,Google Sheets Importxml,我想返回第一个标记的位置号,该标记包含一组标记中的choosen文本 我想设置一个包含4列的google工作表: 1:URL() 2:类别页面上的产品数量: =IMPORTXML($B4;"count(//p[@data-test-id='productTitle'])") 3:标题中包含“罗格朗”或“Céliane with Netatmo”的产品数量: 以上公式很好。我在第四个问题上遇到了困难: 4:标题中包含“Legrand”或“Céliane with Ne

我想返回第一个标记的位置号,该标记包含一组标记中的choosen文本

我想设置一个包含4列的google工作表:

1:URL()

2:类别页面上的产品数量:

    =IMPORTXML($B4;"count(//p[@data-test-id='productTitle'])")
3:标题中包含“罗格朗”或“Céliane with Netatmo”的产品数量:

以上公式很好。我在第四个问题上遇到了困难:

4:标题中包含“Legrand”或“Céliane with Netatmo”的第一款产品的位置

例如,第2列返回24(产品),第3列返回12(产品)。 如果第一个产品是带有“Legrand”或“Céliane with Netatmo”的产品,我希望第4列返回1。如果它在第4位,我希望它返回4

我试过了

    =IMPORTXML($B4;"//div//p[@data-test-id='productTitle'][.='Legrand']/preceding-subling::*)+1")

但我似乎没有“//div//p”的好订单。我打赌这与子分页元素有关,在“/”之前,我必须没有正确选择的标记。

他们确实将数据隐藏在该页面上非常深的地方

尝试(在本例中使用“Céliane”;显然,您可以进一步修改它):


另一个带有以下XPath的选项(我们使用
()
[]
前面的
轴):

输出:

出于安全原因(如果页面上没有罗格朗产品),E4中的公式应为:

=IF(D4=0;"NA";IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1"))

卡斯托拉马倒酒

Axesome,它起作用了!我终于明白了标签的顺序,现在可以在每个网站上做同样的事情:)谢谢。
=IMPORTXML($B4,"count((//li[@class='b9bdc658'][.//p[@data-test-id='productTitle'][contains(.,'Céliane')]])[1]/preceding-sibling::*)+1")
=IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1")
=IF(D4=0;"NA";IMPORTXML(B4;"count((//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])[1]/preceding::div[@data-test-id='product-panel'])+1"))