xpath для получения текста между 2 тегами в формуле IMPORT XML - PullRequest
0 голосов
/ 07 марта 2020

РЕДАКТИРОВАТЬ- Я изменил xpaths. Коэффициенты xpath и результат xpath - именно то, что я хочу. Но URL-адрес гонки и номер гонки не соответствуют этим данным.

Я нашел xpath, который возвращает необходимую мне информацию, но он возвращает все данные, и мне нужны только данные между Австралией и Новой Зеландией .

У меня есть 3 xpath, которые мне нужно уточнить.

Пример URL: https://www.punters.com.au/form-guide/2020-02-06/

Race URL XPATH - // * [@ class = 'component-wrapper form-guide-index'] / table 1 / tbody / tr // td / a / @ href

Результат гонки XPATH - // div [@ class = 'предстоящая гонка__event-info предстоящая гонка__event-info - имеет результаты'] / div [2] / div [2] / div [2] / div / span

Race No XPATH - // * [@ class = 'component-wrapper form-guide-index'] / table 1 / tbody / tr // td / div / div / span

Коэффициенты XPATH - // * [ @ class = 'component-wrapper form-guide-index'] / table / tbody / tr // td / div / div [2] / div [2] / div [4]

Проблема в том, что я получить все 4 xpath, возвращающие данные различной длины. Я хотел бы, чтобы все они возвращали одинаковую длину данных. Если данных нет, то вернуть пустое.

Может кто-нибудь помочь, пожалуйста. Изображение ниже, чтобы показать необходимые данные.

Website data

1 Ответ

1 голос
/ 07 марта 2020

Для Австралии (адаптируйте его к Новой Зеландии), 4 XPath одинаковой длины:

URL-адреса (41 элемент):

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a/@href

Результаты (41 элемент):

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a/text()

Расы (30 + 11 = 41 элемент):

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]//span[@class="upcoming-race__race-num"]/text()|//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a[.="ABD"]/text()

Коэффициенты (30 + 11 = 41 элемент):

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]//div[@class="result-value-1"]/following-sibling::div[3]/text()|//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a[.="ABD"]/text()

Для рас и коэффициентов просто замените «ABD» с пустым, как только вы получите данные в своем листе. Создайте новый столбец «Город» с полученным столбцом URL (сохраняйте текст после второго «/» и непосредственно перед «_»).

РЕДАКТИРОВАТЬ: если вы не хотите использовать «ABD» данные, используйте их (URLS, результаты, расы, шансы). 30 элементов для каждого.

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a[not(.="ABD")]/@href

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]/a[not(.="ABD")]/text()

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]//span[@class="upcoming-race__race-num"]/text()

//tr[@class="upcoming-race__row"][preceding::tr[@class='upcoming-race__row upcoming-race__row--country'][1][*/.="Australia"]]/td[position()>=2]//div[@class="result-value-1"]/following-sibling::div[3]/text()
...