大家好,今天我們利用python爬取NBA球星每年的比賽數據并進行可視化展示。主要用到三個模塊:xpath、matplotlib。其中xpth負責爬取網站上的信息。Matplotlib是Python開發人員常用的Python繪圖庫,可以用來繪制各種2D圖形,具有繪圖質量高,使用簡單的特點,支持Latex公式插入,很多時候只需一行或幾行代碼即可完繪圖。
首先我們打開網站可以看到每年的得分數據。
右擊檢查,找到得分的xpath路徑://*[@id="in_box"]/div/div[1]/table[2]/tbody/tr[2]/td[18]
同樣方式我們獲取到年份的xpath路徑://*[@id="in_box"]/div/div[1]/table[2]/tbody/tr[2]/td[1]
將得到的數據分別存入列表以x軸y軸的數據帶入到matplotlib中,最后形成年度得分折線圖展示出來。
具體代碼如下:
# -*- coding:utf-8 -*-
import requests
from lxml import etree
import pandas as pd
import matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesdef getChineseFont():return FontProperties(fname='/System/Library/Fonts/PingFang.ttc')url='https://nba.hupu.com/players/jamesharden-3306.html'
headers={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
,'referer' : url
}response=requests.get(url=url,headers=headers)
#print(response.text)
html=etree.HTML(response.text)
list1=html.xpath('//*[@id="in_box"]/div/div[1]/table[2]/tbody/tr/td[1]/text()')
listx=list1[1:]
x = list(map(int, listx)) #轉數字
list2=html.xpath('//*[@id="in_box"]/div/div[1]/table[2]/tbody/tr/td[18]/text()')
listy=list2[1:]
y=list(map(float, listy)) #轉數字
print(listx)
print(listy)
plt.plot(x, y)
plt.xlabel("年份",fontproperties=getChineseFont())
plt.ylabel("得分",fontproperties=getChineseFont())
plt.title("哈登年度得分",fontproperties=getChineseFont())
# 在折線圖上顯示具體數值, ha參數控制水平對齊方式, va控制垂直對齊方式
for x1, y1 in zip(x, y):plt.text(x1, y1 + 1, str(y1), ha='center', va='bottom', fontsize=15, rotation=0)
plt.show()
?
最終運行的結果如下:
感謝大家的支持,希望得到點贊與關注,我們下期見。