#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 является сложной задачей, когда вы только начинаете, но я призываю вас продолжать пробовать и учиться. Это действительно мощно в подобных случаях.