用Python爬虫获取NBA球员的生涯数据

NBA球迷往往对球员的各项数据以及对应的排名很感兴趣,而basketball-reference.com这个网站的数据十分详尽。为方便浏览,我在github建了一个项目,借助该网站提供的数据来汇总某个球员的最新生涯数据,项目链接在此。本文介绍一下思路和使用方法。

思路

思路非常简单,首先使用requests库来抓取相关的网页,之后用beautifulsoup这个库来解析html文件,用以解析所需的数据。

Windows可执行程序的使用

首先从这里下载压缩包,解压后得到nbarecord.exe这个可执行文件。之后在Windows命令行中执行该文件,并将球员名字作为参数,就可以得到对应的各项统计数据。假设该可执行文件存储在E盘,若想获取詹姆斯的各项统计,可以执行如下命令获取:

PS C:\Users\lxb> cd e:
PS E:\> .\nbarecord.exe "LeBron James"
Retrieving data from: http://www.basketball-reference.com/leaders/pts_career.html...
<Response [200]>
Retrieving data from: http://www.basketball-reference.com/leaders/trb_career.html...
<Response [200]>
Retrieving data from: http://www.basketball-reference.com/leaders/blk_career.html...
<Response [200]>
Retrieving data from: http://www.basketball-reference.com/leaders/ast_career.html...
<Response [200]>
Retrieving data from: http://www.basketball-reference.com/leaders/stl_career.html...
<Response [200]>
Retrieving data from: http://www.basketball-reference.com/leaders/fg3_career.html...
<Response [200]>
Points(得分):
1.         Kareem Abdul-Jabbar         38387
2.         Karl Malone                 36928
3.         Kobe Bryant                 33643
4.         Michael Jordan              32292
5.         Wilt Chamberlain            31419
6.         Dirk Nowitzki               29797
7.         Shaquille O'Neal            28596
8.         LeBron James                27988
-----------------Last Time------------------
8.         LeBron James                27988
--------------------------------------------
Rebounds(篮板):
64.        Chris Webber                 8124
65.        Lamar Odom                   8059
66.        Bob McAdoo                   8048
67.        Larry Foust                  8041
68.        Happy Hairston               8019
69.        John Havlicek                8007
70.        Oscar Robertson              7804
71.        Sam Perkins                  7666
72.        Caldwell Jones               7663
73.        Antonio McDyess              7638
74.        Clyde Lee                    7626
75.        Chris Bosh                   7592
76.        Wayne Embry                  7544
77.        Maurice Lucas                7520
78.        Paul Pierce                  7497
79.        Scottie Pippen               7494
80.        James Donaldson              7492
81.        Al Jefferson                 7477
82.        Juwan Howard                 7428
           LeBron James                 7428
-----------------Last Time------------------
           LeBron James                 7428
--------------------------------------------
Blocks(封盖):
112.       Roy Hinson                    882
113.       Rony Seikaly                  872
114.       Joe Smith                     868
115.       James Edwards                 867
116.       Kenyon Martin                 864
117.       Paul Millsap                  853
118.       Dave Corzine                  848
           Donyell Marshall              848
120.       Kurt Thomas                   841
121.       Danny Schayes                 840
           Joakim Noah                   840
123.       Joel Przybilla                836
124.       Alex English                  833
125.       Marvin Webster                829
126.       Joe Meriweather               810
127.       Alvan Adams                   808
128.       Tracy McGrady                 807
129.       Jerome Kersey                 799
130.       Vin Baker                     798
131.       LeBron James                  797
-----------------Last Time------------------
131.       LeBron James                  797
--------------------------------------------
Assists(助攻):
1.         John Stockton               15806
2.         Jason Kidd                  12091
3.         Steve Nash                  10335
4.         Mark Jackson                10334
5.         Magic Johnson               10141
6.         Oscar Robertson              9887
7.         Isiah Thomas                 9061
8.         Gary Payton                  8966
9.         Andre Miller                 8524
10.        Chris Paul                   8037
11.        Rod Strickland               7987
12.        Maurice Cheeks               7392
13.        Lenny Wilkens                7211
14.        LeBron James                 7200
-----------------Last Time------------------
14.        LeBron James                 7200
--------------------------------------------
Steals(抢断):
2.         Jason Kidd                   2684
3.         Michael Jordan               2514
4.         Gary Payton                  2445
5.         Maurice Cheeks               2310
6.         Scottie Pippen               2307
7.         Clyde Drexler                2207
8.         Hakeem Olajuwon              2162
9.         Alvin Robertson              2112
10.        Karl Malone                  2085
11.        Mookie Blaylock              2075
12.        Allen Iverson                1983
13.        Derek Harper                 1957
14.        Kobe Bryant                  1944
15.        Chris Paul                   1873
16.        Isiah Thomas                 1861
17.        Kevin Garnett                1859
18.        Shawn Marion                 1759
19.        Paul Pierce                  1751
20.        Magic Johnson                1724
21.        LeBron James                 1723
-----------------Last Time------------------
21.        LeBron James                 1723
--------------------------------------------
3-pt Field Goals(三分命中数):
8.         Kyle Korver                  1978
9.         Joe Johnson                  1886
10.        Chauncey Billups             1830
11.        Kobe Bryant                  1827
12.        Stephen Curry                1795
13.        Rashard Lewis                1787
14.        Peja Stojakovic              1760
15.        Dirk Nowitzki                1736
16.        J.R. Smith                   1729
17.        Dale Ellis                   1719
18.        Steve Nash                   1685
19.        Jason Richardson             1608
20.        Mike Miller                  1586
21.        Glen Rice                    1559
22.        Eddie Jones                  1546
23.        Tim Hardaway                 1542
24.        Nick Van Exel                1528
25.        Mike Bibby                   1517
26.        Michael Finley               1454
27.        LeBron James                 1415
-----------------Last Time------------------
27.        LeBron James                 1415
--------------------------------------------

程序运行时,会从网站爬取最新的数据,显示球员当前所获得的成就,并显示他最近需要超越的一些球员(最多显示之前20个球员)。**Last Time **这一栏显示上一次执行程序获取的该球员相应数据,这样一来可以了解到球员在最近的比赛后取得的进展。
注意:球员名字需要按照basketball-reference.com这个网站提供的资料来作为输入。

通过Python环境运行

首先clone一份代码:

git clone https://github.com/schnauzers/predict.git

本项目用Python3编写,因此你需要一个Python3环境(或者用pyenv虚拟)。
请安装如下几个依赖库:

pip install requests bs4 lxml colorama

之后将球员名字作为参数来执行脚本,便可获取相应的数据:

python getrecord.py "LeBron James"

Linux下通过邮件自动通知数据更新

如果拥有一个Linux环境,则可以通过crontabmail等工具,利用Linux管道,结合本程序,每天获取关注球员的最新数据,并将数据发送到自己的邮箱。实现也很简单,举例如下:
首先通过crontab -e命令,打开编辑窗口,之后在编辑器里输入如下内容(请自行修改代码路径和自己的邮箱地址):

0 20 * * * python3 /home/predict/getpage.py "LeBron James" | mail -s "Data of LeBron today" YourEmail@domain.cc

这样便可以在每天晚上20:00收到关于詹姆斯最新的生涯数据了(注意在自己邮箱里设置白名单,防止被当做垃圾邮件)。

    原文作者:schnauzer
    原文地址: https://www.jianshu.com/p/888b0cb5e74c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞