使用BeautifulSoup找不到深层嵌套标签ID

时间:2019-04-03 07:31:05

标签: web-scraping beautifulsoup

我正在尝试从https://www.basketball-reference.com/leagues/NBA_2019.html抓取NBA数据,但是我遇到了BeautifulSoup丢弃深度嵌套标签的问题。

我尝试使用soup.find(id='opponent-stats-per_game')来获取“每场比赛统计数据”表。但是,我得到None的结果。如果我尝试在树中找到一个更高的div,那么它将剪切更深的子级。

请问有人可以给我一些指导吗?对于使用BeautifulSoup进行网页抓取我还是很陌生的

1 个答案:

答案 0 :(得分:0)

reference.com网站是部分动态的。很久以前,当我试图找出football-reference.com时,我遇到了同样的问题

有几种方法可以处理它。一种是先使用Selenium呈现页面,然后再进入并抓取表格。现在您仍然可以使用BeautifulSoup来获取它,但是每当我看到<table>标签时,我的第一个尝试就是使用pandas和.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]