Форум сайта python.su
Только начинаю знакомиться с программированием, в качестве первой задачи необходимо спарсить с сайта 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()
Отредактировано nefeda (Март 23, 2020 13:54:41)
Офлайн
Такие вещи делаются не через Selenium. А чтобы делать их через модуль urllib или модуль requests, нужны знания. Очень может быть, что данные не хранятся в странице, а заполняются динамически с помощью JavaScript-скриптов, которые запускаются внутри браузера, когда страница уже вся загружена. Поэтому поиск в блоках страницы может ничего не давать, потому что они загружаются пустыми.
Офлайн
py.user.nextСпасибо за ответ.
Такие вещи делаются не через Selenium. А чтобы делать их через модуль urllib или модуль requests, нужны знания. Очень может быть, что данные не хранятся в странице, а заполняются динамически с помощью JavaScript-скриптов, которые запускаются внутри браузера, когда страница уже вся загружена. Поэтому поиск в блоках страницы может ничего не давать, потому что они загружаются пустыми.
Отредактировано nefeda (Март 23, 2020 23:56:51)
Офлайн
А где вы функцию stats вызываете? Функция main только кликает по элементу и все
Офлайн
nefedaЭто надо смотреть в инструментах разработки, встроенных в браузер, какие запросы посылаются. Какой бы JavaScript-скрипт ни был, он работает только внутри браузера и чтобы что-то получить, он посылает запрос наружу в фоне. Вот этот запрос и можно отследить и воспроизвести через модуль urllib (встроенный) или модуль requests (сторонний). Ищи вкладку “Сеть” в инструментах разработчика и там смотри, какие запросы посылаются и какие заголовки HTTP передаются, чтобы получать результаты для страницы и вставлять их в неё.
Да, я сначала пробовал использовать requests+bs4, но понял, что содержимое таблицы не находятся.
Отредактировано py.user.next (Март 24, 2020 01:48:36)
Офлайн
Попробуйте следующий исправленный код:
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.
Офлайн