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环境,则可以通过crontab
,mail
等工具,利用Linux管道,结合本程序,每天获取关注球员的最新数据,并将数据发送到自己的邮箱。实现也很简单,举例如下:
首先通过crontab -e
命令,打开编辑窗口,之后在编辑器里输入如下内容(请自行修改代码路径和自己的邮箱地址):
0 20 * * * python3 /home/predict/getpage.py "LeBron James" | mail -s "Data of LeBron today" YourEmail@domain.cc
这样便可以在每天晚上20:00收到关于詹姆斯最新的生涯数据了(注意在自己邮箱里设置白名单,防止被当做垃圾邮件)。