Глубокие вложенные теги ID не найдены с помощью BeautifulSoup - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь очистить данные NBA от https://www.basketball -reference.com / league / NBA_2019.html , но у меня возникают проблемы, когда BeautifulSoup удаляет глубоко вложенные теги.

Я пытался использовать soup.find(id='opponent-stats-per_game') для захвата таблицы «Статистика противников за игру».Тем не менее, я получаю None результат.Если я вместо этого попытаюсь найти div, который находится выше в дереве, он обрезает более глубоких детей.

Может кто-нибудь предложить мне несколько советов о том, как это работает?Я довольно новичок в поиске в Интернете с помощью BeautifulSoup

1 Ответ

0 голосов
/ 03 апреля 2019

Сайты reference.com частично динамичны. У меня была такая же проблема давным-давно при попытке выяснить football-reference.com

Есть несколько способов справиться с этим. Одним из них является использование Selenium для рендеринга страницы, а затем вы можете зайти и взять таблицы. Теперь вы все еще можете использовать BeautifulSoup, чтобы получить его, но всякий раз, когда я вижу теги <table>, моей первой первоначальной попыткой является использование панд и .read_html(), так как это сделает большую часть работы за столами.

Это вернет список данных. Тогда вам просто нужно найти, какой именно фрейм данных вы хотите, и затем, возможно, сделать небольшую манипуляцию с именами столбцов, а что - нет, чтобы получить то, что вам нужно.

При этом статистика оппонента за игровым столом находилась в индексной позиции 19:

from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd

driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
page_url = 'https://www.basketball-reference.com/leagues/NBA_2019.html'
driver.get(page_url)

tables = pd.read_html(driver.page_source)
opp_per_gm_df = tables[19]

driver.quit()

Выход:

print (opp_per_gm_df)
      Rk                     Team   G     MP    FG  ...  STL  BLK   TOV    PF    PTS
0    1.0        Memphis Grizzlies  77  242.3  37.2  ...  7.7  4.9  15.5  21.7  105.6
1    2.0               Miami Heat  77  240.3  38.2  ...  7.4  4.8  14.2  20.3  105.6
2    3.0          Indiana Pacers*  78  240.3  38.7  ...  7.5  5.2  15.6  20.1  104.3
3    4.0               Utah Jazz*  77  240.6  39.7  ...  8.6  4.7  13.9  22.2  106.1
4    5.0          Denver Nuggets*  77  240.6  39.6  ...  7.5  5.0  13.5  20.5  106.9
5    6.0          Detroit Pistons  77  242.3  40.0  ...  6.9  5.2  14.1  21.5  107.5
6    7.0            Orlando Magic  78  241.3  39.9  ...  6.9  4.4  13.0  18.8  106.5
7    8.0          Boston Celtics*  78  241.3  39.5  ...  6.8  3.8  15.2  19.6  108.0
8    9.0         Toronto Raptors*  78  242.2  40.2  ...  7.7  4.5  15.1  20.6  108.4
9   10.0         Dallas Mavericks  77  241.0  40.9  ...  7.9  4.6  13.1  23.4  109.9
10  11.0         Milwaukee Bucks*  78  241.3  40.3  ...  6.9  4.9  13.4  20.0  108.6
11  12.0  Portland Trail Blazers*  77  242.3  41.1  ...  7.3  5.1  12.4  20.8  110.5
12  13.0         Houston Rockets*  78  241.9  40.4  ...  7.4  4.6  15.0  20.1  109.3
13  14.0   Golden State Warriors*  77  241.6  40.3  ...  7.6  3.7  13.5  19.8  111.4
14  15.0       San Antonio Spurs*  78  241.6  41.6  ...  7.2  4.1  12.2  19.7  110.4
15  16.0      Philadelphia 76ers*  77  241.6  41.5  ...  7.9  4.0  12.9  22.3  112.2
16  17.0        Charlotte Hornets  77  241.9  42.0  ...  7.1  6.1  13.6  20.6  112.2
17  18.0   Oklahoma City Thunder*  78  242.2  40.8  ...  8.2  5.1  16.9  22.6  110.8
18  19.0            Brooklyn Nets  78  243.8  42.2  ...  7.8  5.4  13.5  22.3  112.5
19  20.0   Minnesota Timberwolves  77  241.9  42.0  ...  6.6  5.6  14.7  22.0  114.0
20  21.0          New York Knicks  77  241.3  42.0  ...  7.4  5.7  13.4  21.0  114.1
21  22.0            Chicago Bulls  78  242.9  42.1  ...  7.5  5.6  13.5  18.9  113.4
22  23.0    Los Angeles Clippers*  78  241.6  41.4  ...  8.2  5.9  13.1  24.0  113.4
23  24.0       Los Angeles Lakers  78  241.3  42.1  ...  8.3  5.1  14.3  21.0  113.7
24  25.0      Cleveland Cavaliers  78  241.0  43.0  ...  6.9  5.6  12.5  19.6  113.9
25  26.0         Sacramento Kings  78  240.6  41.9  ...  7.7  5.1  15.9  21.6  114.9
26  27.0             Phoenix Suns  78  242.2  42.2  ...  9.1  5.0  15.6  20.7  116.3
27  28.0     New Orleans Pelicans  78  240.6  43.2  ...  8.4  5.4  13.8  21.3  116.5
28  29.0       Washington Wizards  78  243.2  43.3  ...  7.8  4.6  15.9  21.4  116.9
29  30.0            Atlanta Hawks  78  242.2  42.6  ...  9.9  5.4  15.1  22.0  118.8
30   NaN           League Average  78  241.7  41.0  ...  7.7  5.0  14.2  21.0  111.1

[31 rows x 25 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...