Используйте selenium для получения информации из таблицы с изменением xpaths

#python #xml #selenium

#python #xml #selenium

Вопрос:

Я пытаюсь просмотреть список компаний и получить их экологические рейтинги из CSRHub. Я бы разместил ссылку в качестве примера, но только при входе в систему. Мой скребок не получал точных чисел, поскольку расположение рейтингов изменяется в зависимости от строк таблицы на веб-странице.

Например: здесь мы видим, что Target имеет 5 строк в таблице, а xpath для 73 (рейтинг энергии и изменения климата) равен:

//[@id=»rating-section»]/div / div 2/ div / div /table/tbody/tr[23]/ td[5]/div/table/tbody/tr / td 2/div / div / span 1/span*

введите описание изображения здесь

Но компании различаются по количеству строк, вот xpath для разных элементов, которые я пытаюсь собрать.

введите описание изображения здесь

Функции таблицы и веб-страницы не имеют идентификаторов или очень хорошо помеченных классов. Я довольно новичок в понимании интерфейса. Как я могу выбрать правильную функцию независимо от количества строк, которые есть у компании?

Комментарии:

1. Если на странице есть table элемент, почему бы вам не получить всю таблицу pandas целиком?

2. можете ли вы указать URL-адрес страницы, которую вы пытаетесь очистить

Ответ №1:

Поскольку вы не можете полагаться на нумерацию строк, определите, на что вы можете положиться — в данном случае на текстовую метку искомого значения. Используйте метод xpath contains() для проверки текста. Я не могу прочитать HTML на вашем скриншоте, поэтому сложно дать точный код, но он будет выглядеть примерно так:

если элемент <span class="something useless">I am a label!</span>

используйте "//*[@id='rating section']//table//span[contains(text(),'I am a label')]"

Кстати, удобный трюк заключается в использовании «//» везде, где есть много неспецифического кода, поэтому вам не нужно иметь весь / div / span / div cruft в вашем xpath.

Также посмотрите на использование дочерних и родительских узлов. Определите элемент, который является очень статичным рядом с нужным вам элементом, затем используйте выражение дочернего узла (и дополнительный xpath, если необходимо), чтобы получить необходимый элемент.

Xpath является сложной задачей, когда вы только начинаете, но я призываю вас продолжать пробовать и учиться. Это действительно мощно в подобных случаях.