Проблема очистки данных с веб-сайта, который, кажется, изменился

#python #selenium #web-scraping #selenium-chromedriver

#python #селен #веб-очистка #selenium-chromedriver

Вопрос:

Я пытаюсь очистить данные из таблицы PR College на https://gbr.milesplit.com/athletes/pro/5424599/stats Код выглядит следующим образом

 prTable = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div/aside/div[4]/table')))
  

Иногда ответ, который я получаю, правильный, это строка, содержащая личные записи. В других случаях он просто берет случайную информацию с веб-страницы, а иногда и не может найти элемент. Я довольно смущен тем, почему это работает иногда, но не всегда. Есть ли лучший способ, чем xpath, или я использую неправильный тег?

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

1. Можете ли вы использовать BeautifulSoup ?

2. Я никогда не использовал BS, как бы я мог использовать его в этом контексте?

3. Я опубликовал пример с beautifulsoup

4. Если сайт динамический bs4 , это не будет сделано. @CMB Поскольку вы сказали, что он получает случайную информацию, я думаю, вам не следует пытаться получить информацию Xpath . Попробуйте получить то, что вы хотите, используя имя класса, идентификатор и т.д. Этот способ более точен.

Ответ №1:

Используйте этот пример, как вы можете проанализировать страницу с помощью beautifulsoup :

 from bs4 import BeautifulSoup
import requests


url = 'https://gbr.milesplit.com/athletes/pro/5424599/stats'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

for event, time in zip(soup.select('td.event'),
                       soup.select('td.time')):
    print(event.text, time.text)
  

С принтами:

 800 Meter Run 1:48.05
1500 Meter Run 3:35.01
800 Meter Run 1:48.87
One Mile Run 3:57.02
8000 Meter Run 24:01.50
10,000 Meter Run 30:43.50
800 Meter Run 1:52.25
One Mile Run 4:05.32
1500 Meter Run 3:43.46
800 Meter Run 1:48.05
1500 Meter Run 3:35.01
800 Meter Run 1:48.87
One Mile Run 3:57.02
8000 Meter Run 24:01.50
10,000 Meter Run 30:43.50
800 Meter Run 1:52.25
One Mile Run 4:05.32
1500 Meter Run 3:43.46