Позиция тега возврата Xpath (который содержит текст) в наборе - PullRequest
0 голосов
/ 09 июля 2020

Я хотел бы вернуть номер позиции первого тега, который содержит выбранный текст в наборе тегов.

Я хочу настроить лист Google с 4 столбцами:

1: URL-адрес (https://www.castorama.fr/electricite/interrupteur-et-prise/interrupteur-et-prise-etanche/cat_id_4414.cat)

2: количество продуктов на странице категории:

    =IMPORTXML($B4;"count(//p[@data-test-id='productTitle'])")

3: количество продуктов, название которых содержит "Legrand" или "Céliane with Netatmo":

    =IMPORTXML($B4;"count(//p[@data-test-id='productTitle'][contains(.,'Céliane with Netatmo')or contains(.,'Legrand')])")

Приведенные выше формулы подходят. У меня проблемы с четвертым:

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". Бьюсь об заклад, это связано с элементами subling, до "/" у меня не должно быть правильных выбранных тегов.

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Они действительно очень глубоко спрятали данные на этой странице ....

Попробуйте (используя "Céliane" для этого примера; очевидно, вы можете изменить его дальше):

=IMPORTXML($B4,"count((//li[@class='b9bdc658'][.//p[@data-test-id='productTitle'][contains(.,'Céliane')]])[1]/preceding-sibling::*)+1")
0 голосов
/ 10 июля 2020

Другой вариант со следующим XPath (мы используем оси () [] и preceding):

=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")

Вывод:

LG

В целях безопасности (если на странице нет продукта Legrand) формула в 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"))

Castorama pour ré-u-ssir!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...