【问题标题】:How can I scrape the table stats?如何抓取表格统计信息?
【发布时间】:2020-06-25 02:01:35
【问题描述】:

这是我要抓取的链接:https://stats.nba.com/teams/traditional/?sort=W_PCT&dir=-1

所以当我这样做时:

def roster(URL):
     res = requests.get(url)  
     text = res.text  
     soup = bs4.BeautifulSoup(text, 'html.parser')
     print (soup)

我抓取的 HTML 不包含实际的表格。例如,我正在寻找:

<div class="nba-stat-table__overlay" fata-fixed="2" role=grid">

那么我如何才能真正找到它呢?请帮忙!

【问题讨论】:

  • 如果类名没有改变,请尝试通过标签的类名获取标签。 soup.findAll("div", {"class": "nba-stat-table__overlay"})
  • 所以当我在网页上点击检查时,它不会显示我想要的课程。只有当我点击表格时,它才会找到类。这是为什么呢?
  • 该页面正在使用 angularjs 框架,我们正在寻找的表格数据是在主页加载后延迟加载的组件,这就是它没有出现在响应中的原因。现在有两种选择。如果可能的话,要么使用 selenium 来抓取它,要么从开发工具的网络部分获取返回表统计信息的 URL。
  • 好的。您能否推荐一些我应该阅读或观看的网站或视频,以帮助我实现目标?

标签: python web-scraping python-requests


【解决方案1】:

使用 Selenium 打开页面,然后将 html 源代码输入 pandas 以解析表格。

from selenium import webdriver
import pandas as pd

driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.get('https://stats.nba.com/teams/traditional/?sort=W_PCT&dir=-1')

df = pd.read_html(driver.page_source)[0].dropna(axis=1)

driver.close()

输出:

print (df)
    Unnamed: 0                    TEAM  GP   W   L  ...  BLK  BLKA    PF   PFD   +/-
0            1         Milwaukee Bucks  65  53  12  ...  6.0   4.6  19.2  21.3  11.3
1            2      Los Angeles Lakers  63  49  14  ...  6.8   3.7  20.6  21.4   7.4
2            3         Toronto Raptors  64  46  18  ...  4.9   5.3  21.5  20.0   6.5
3            4             LA Clippers  64  44  20  ...  5.0   4.9  22.0  22.8   6.5
4            5          Boston Celtics  64  43  21  ...  5.6   5.6  21.4  20.6   6.2
5            6          Denver Nuggets  65  43  22  ...  4.6   4.5  20.0  20.0   3.0
6            7               Utah Jazz  64  41  23  ...  4.0   4.6  20.0  20.6   3.2
7            8              Miami Heat  65  41  24  ...  4.5   4.2  20.4  21.5   3.2
8            9         Houston Rockets  64  40  24  ...  5.1   4.9  21.6  20.8   3.8
9            9   Oklahoma City Thunder  64  40  24  ...  5.0   4.1  18.8  22.8   2.5
10          11          Indiana Pacers  65  39  26  ...  5.1   4.5  19.6  18.6   1.9
11          11      Philadelphia 76ers  65  39  26  ...  5.4   3.9  20.6  20.3   2.2
12          13        Dallas Mavericks  67  40  27  ...  5.0   4.0  19.0  20.8   6.0
13          14       Memphis Grizzlies  65  32  33  ...  5.6   5.3  20.8  19.7  -1.1
14          15           Brooklyn Nets  64  30  34  ...  4.6   5.3  20.7  20.9  -0.6
15          16           Orlando Magic  65  30  35  ...  5.7   4.8  17.6  19.2  -1.0
16          17  Portland Trail Blazers  66  29  37  ...  6.2   5.0  21.4  19.7  -1.6
17          18    New Orleans Pelicans  64  28  36  ...  5.1   4.8  21.0  20.6  -0.8
18          18        Sacramento Kings  64  28  36  ...  4.2   4.3  21.9  19.3  -1.9
19          20       San Antonio Spurs  63  27  36  ...  5.5   4.4  19.2  19.7  -1.8
20          21            Phoenix Suns  65  26  39  ...  4.0   5.6  22.1  22.8  -1.4
21          22      Washington Wizards  64  24  40  ...  4.3   5.0  22.6  22.4  -4.0
22          23       Charlotte Hornets  65  23  42  ...  4.1   5.0  18.8  20.6  -6.8
23          24           Chicago Bulls  65  22  43  ...  4.1   5.9  21.8  19.2  -3.1
24          25         New York Knicks  66  21  45  ...  4.7   5.0  22.2  19.8  -6.5
25          26         Detroit Pistons  66  20  46  ...  4.5   5.6  19.7  19.8  -3.6
26          27           Atlanta Hawks  67  20  47  ...  5.1   6.4  23.1  21.0  -8.0
27          28  Minnesota Timberwolves  64  19  45  ...  5.7   5.5  21.4  21.6  -4.3
28          29     Cleveland Cavaliers  65  19  46  ...  3.2   6.3  18.3  19.6  -7.9
29          30   Golden State Warriors  65  15  50  ...  4.6   4.9  20.1  20.1  -8.7

[30 rows x 28 columns]

【讨论】:

    猜你喜欢
    • 2021-04-06
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多