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