Уведомления

Группа в 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
Сообщения: 9843
Репутация: +  853  -
Профиль   Отправить 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
Сообщения: 9843
Репутация: +  853  -
Профиль   Отправить 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.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version