Я люблю работать со спортивными данными. У меня была эта проблема с профессиональными ссылочными сайтами раньше. Таблицы отображаются после, поэтому в большинстве случаев вам нужно будет использовать Selenium, чтобы разрешить его визуализацию, или, как упоминалось выше, а затем можно получить источник HTML. Но в этом нет необходимости, так как большинство таблиц находятся в комментариях к исходному HTML-ответу. Вы можете использовать BeautifulSoup для извлечения комментариев, а затем выполнять поиск по тегам <table>
.
Я также предпочитаю использовать панд каждый раз, когда вижу или мне нужно вытянуть теги <table>
. Панды используют Beautifulsoup под капотом и выполняют большую часть работы. Все, что вам нужно сделать, это манипулировать столом, если это необходимо.
Это создаст список таблиц, достаточно просто вытянуть нужную, которая находится в позиции индекса 1
:
Код:
import requests
from bs4 import BeautifulSoup
from bs4 import Comment
import pandas as pd
url = 'https://www.pro-football-reference.com/boxscores/200409090nwe.htm'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
tables = []
for each in comments:
if 'table' in each:
try:
tables.append(pd.read_html(each)[0])
except:
continue
Вывод:
print (tables[1])
0 1
0 Game Info Game Info
1 Won Toss Patriots
2 Roof outdoors
3 Surface grass
4 Weather 73 degrees, relative humidity 99%, wind 19 mph...
5 Vegas Line New England Patriots -3.0
6 Over/Under 44.5 (over)