#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Я пытался создать веб- evolving-hockey.com веб-сайт для сбора данных команды и может читать только до тех пор, пока
использование:
from bs4 import BeautifulSoup as bs
from bs4 import Comment
import requests
site = 'https://evolving-hockey.com/stats/team_standard/?_inputs_amp;std_tm_str="5v5"amp;std_tm_table="On-Ice"amp;std_tm_team="All"amp;std_tm_range="Seasons"amp;std_tm_adj="Score & Venue"amp;std_tm_span="Regular"amp;dir_ttbl="Stats"amp;std_tm_type="Rates"amp;std_tm_group="Season"'
r = requests.get(site)
soup = bs(r.content, 'html.parser')
data = soup.find_all('table')
ничего не возвращает, даже если html-код предполагает, что внутри есть таблицы.
Почему beautifulsoup не может найти данные таблицы? Связаны ли они с чем-то другим?
Спасибо за помощь
Комментарии:
1. Возможно, они динамически извлекаются из другого места браузером. Присутствуют ли данные в источнике страницы просмотра?
2. это происходит, когда вы проверяете код на веб-сайте. Однако не тогда, когда вы вводите его с помощью BS
Ответ №1:
Для извлечения динамически загружаемых данных я использовал selenium
from bs4 import BeautifulSoup as bs
from selenium import webdriver
driver = webdriver.Chrome()
site = 'https://evolving-hockey.com/stats/team_standard/?_inputs_amp;std_tm_str="5v5"amp;std_tm_table="On-Ice"amp;std_tm_team="All"amp;std_tm_range="Seasons"amp;std_tm_adj="Score & Venue"amp;std_tm_span="Regular"amp;dir_ttbl="Stats"amp;std_tm_type="Rates"amp;std_tm_group="Season"'
driver.get(site)
import time
time.sleep(5) # delay
soup = bs(driver.page_source, 'html.parser')
data = soup.find_all('tr')[1]
for d in data:
print(d.get_text(strip=True), end=' ')
data2 = soup.find_all('tr')[1:33]
for x in data2:
print(x.get_text(strip=True,separator=' '), end='n')
driver.quit()
Печать
Name Team Season GP TOI GF% SF% FF% CF% xGF% GF/60 GA/60 SF/60 SA/60 FF/60 FA/60 CF/60 CA/60 xGF/60 xGA/60 G±/60 S±/60 F±/60 C±/60 xG±/60 Sh% Sv% Name Team Season GP TOI GF% SF% FF% CF% xGF% GF/60 GA/60 SF/60 SA/60 FF/60 FA/60 CF/60 CA/60 xGF/60 xGA/60 G±/60 S±/60 F±/60 C±/60 xG±/60 Sh% Sv%
1 Ducks ANA 19-20 71 3450.65 46.57 47.7 47.97 47.87 47.08 2.22 2.55 28.77 31.54 41.45 44.96 53.96 58.75 2.32 2.61 -0.33 -2.77 -3.51 -4.79 -0.29 7.73 91.91
2 Coyotes ARI 19-20 70 3405.93 50.08 49.72 48.57 48.6 49.61 2.24 2.24 31.12 31.47 42.56 45.07 56.02 59.24 2.33 2.36 0.01 -0.35 -2.51 -3.22 -0.04 7.21 92.9
3 Bruins BOS 19-20 70 3328.28 57.69 52.48 51.83 51.93 52.82 2.56 1.88 31.07 28.13 42.5 39.5 55.98 51.81 2.22 1.98 0.68 2.94 3 4.17 0.24 8.24 93.32
4 Sabres BUF 19-20 69 3393.5 49.11 47.9 48.37 48.81 47.54 2.29 2.37 27.93 30.38 38.75 41.36 50.16 52.62 2.05 2.26 -0.08 -2.45 -2.61 -2.45 -0.21 8.2 92.19
5 Hurricanes CAR 19-20 68 3217.15 50.97 52.96 53.66 54.42 52.37 2.63 2.53 32.38 28.75 45.33 39.15 60.05 50.29 2.76 2.51 0.1 3.62 6.18 9.76 0.25 8.12 91.2
6 Blue Jackets CBJ 19-20 70 3478.85 50.55 51.82 50.66 48.87 51.66 2.14 2.09 31.53 29.32 41.53 40.44 53.63 56.11 2.22 2.08 0.05 2.21 1.09 -2.48 0.14 6.78 92.87
7 Flames CGY 19-20 70 3429.05 47.34 48.91 49.42 49.91 50.74 2.31 2.57 30.24 31.58 43.03 44.05 57.22 57.41 2.47 2.4 -0.26 -1.35 -1.02 -0.2 0.07 7.64 91.86
etc.
Комментарии:
1. Спасибо за это решение. К сожалению, я не могу заставить Selenium работать. Я продолжаю переходить непосредственно на пустую страницу, что, похоже, является проблемой для некоторых людей. Пока не удалось найти обходной путь для этого.