Уведомления

Группа в Telegram: @pythonsu

#1 Март 23, 2020 13:54:07

nefeda
Зарегистрирован: 2020-03-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

Только начинаю знакомиться с программированием, в качестве первой задачи необходимо спарсить с сайта https://www.rotowire.com/soccer/player.php?id=1279 данные таблицы “Soccer Per Game Stats”. По умолчанию открывается вкладка “Session Stats”, поэтому необходимо сначала кликнуть по вкладке “Per Game” и потом выгрузить содержимое ячеек таблицы. Данные содержатся в контейнерах div, как и вся таблица.
На данный момент получилось так:

 def main():
    driver = webdriver.Chrome()
    driver.get("https://www.rotowire.com/soccer/player.php?id=1279")
    elements = driver.find_elements_by_css_selector("div.filter-tab")
    elements[2].click()
 
def stats(container):
    soup = BeautifulSoup(container, "html.parser")
    matches = soup.select(".socStatsPerGame")
    for match in matches:
        year = match.select_one("div, attrs={'aria-colindex': '1'}")
        league = match.select_one("div, attrs={'aria-colindex': '2'}")
        print(year.text, league.text)
        stats(container)
 
    driver.quit()
 
if __name__ == "__main__":
    main()

Запускается браузер, открывается нужная ссылка, нажимается вкладка “Per Game”, закрывается браузер, но данные не выгружаются, в консоле:

/Parser.py

Process finished with exit code 0

Windows 10, Python 3.7.7, PyCharm. Просьба помочь разобраться.

Отредактировано nefeda (Март 23, 2020 13:54:41)

Офлайн

#2 Март 23, 2020 22:14:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

Такие вещи делаются не через Selenium. А чтобы делать их через модуль urllib или модуль requests, нужны знания. Очень может быть, что данные не хранятся в странице, а заполняются динамически с помощью JavaScript-скриптов, которые запускаются внутри браузера, когда страница уже вся загружена. Поэтому поиск в блоках страницы может ничего не давать, потому что они загружаются пустыми.



Офлайн

#3 Март 23, 2020 23:56:21

nefeda
Зарегистрирован: 2020-03-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

py.user.next
Такие вещи делаются не через Selenium. А чтобы делать их через модуль urllib или модуль requests, нужны знания. Очень может быть, что данные не хранятся в странице, а заполняются динамически с помощью JavaScript-скриптов, которые запускаются внутри браузера, когда страница уже вся загружена. Поэтому поиск в блоках страницы может ничего не давать, потому что они загружаются пустыми.
Спасибо за ответ.
Да, я сначала пробовал использовать requests+bs4, но понял, что содержимое таблицы не находятся. В поисках решения наткнулся на Selenium. Можно ли парсить данные из запросов браузера?

Отредактировано nefeda (Март 23, 2020 23:56:51)

Офлайн

#4 Март 24, 2020 00:53:39

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

А где вы функцию stats вызываете? Функция main только кликает по элементу и все

Офлайн

#5 Март 24, 2020 01:47:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

nefeda
Да, я сначала пробовал использовать requests+bs4, но понял, что содержимое таблицы не находятся.
Это надо смотреть в инструментах разработки, встроенных в браузер, какие запросы посылаются. Какой бы JavaScript-скрипт ни был, он работает только внутри браузера и чтобы что-то получить, он посылает запрос наружу в фоне. Вот этот запрос и можно отследить и воспроизвести через модуль urllib (встроенный) или модуль requests (сторонний). Ищи вкладку “Сеть” в инструментах разработчика и там смотри, какие запросы посылаются и какие заголовки HTTP передаются, чтобы получать результаты для страницы и вставлять их в неё.



Отредактировано py.user.next (Март 24, 2020 01:48:36)

Офлайн

#6 Сен. 22, 2023 08:01:09

mariakennet
Зарегистрирован: 2023-09-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

Попробуйте следующий исправленный код:
python word finder
Copy code
from selenium import webdriver
from bs4 import BeautifulSoup

def main():
driver = webdriver.Chrome()
driver.get("https://www.rotowire.com/soccer/player.php?id=1279“)
elements = driver.find_elements_by_css_selector(”div.filter-tab")
elements.click()
container = driver.page_source
stats(container)
driver.quit()

def stats(container):
soup = BeautifulSoup(container, “html.parser”)
matches = soup.select(“.socStatsPerGame”)
for match in matches:
year = match.select_one("div“)
league = match.select_one(”div“)
if year and league:
print(year.text, league.text)

if __name__ == ”__main__“:
main()
Этот код включает в себя исправления, описанные выше, и должен помочь вам успешно извлечь данные из таблицы ”Soccer Per Game Stats". Убедитесь, что у вас установлены библиотеки selenium и beautifulsoup4, а также драйвер Chrome.

Офлайн

#7 сегодня 07:29:02

Appersona
Зарегистрирован: 2025-08-11
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных с таблицы сайта. Selenium

Hey there! It looks like you're off to a solid start with Selenium, especially for a beginner. The issue might be that your stats(container) function isn't actually being called or passed the correct HTML after the “Per Game” tab is clicked. Perhaps you need to grab the page source after clicking that tab. It reminds me a bit of when I'd spend hours trying to get the perfect order at Papa's Freezeria – sometimes you just miss a step! Keep at it, you'll get there.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version