网络爬虫+数据可视化
(1)網(wǎng)頁分析
打開虎撲體育網(wǎng)頁,對網(wǎng)頁進行分析,使用xpath定位相關(guān)元素,提取數(shù)據(jù)
?(2)數(shù)據(jù)爬取
導入相關(guān)的庫:“import ?requests”,“import csv”,利用requests的get()方法爬取數(shù)據(jù),并用csv格式保存數(shù)據(jù)。
編輯爬蟲文件:使用xpath的方法對網(wǎng)頁元素進行定位。
運行代碼并保存數(shù)據(jù)。
參考代碼如下:
import csvf = open('hpty.csv', mode='a', encoding='utf8', newline='') csv_write = csv.DictWriter(f, fieldnames=['排名', '球隊', '球員', '場均得分', '命中率', '三分命中率', '罰球命中率']) csv_write.writeheader() url = 'https://nba.hupu.com/stats/players' head = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36' } nb = requests.get(url, headers=head).text from lxml import etreesb = etree.HTML(nb) whh = sb.xpath('//tbody/tr[not(@class)]') for i in whh:pm = str(i.xpath('./td[1]/text()')).replace("['", "").replace("']", "") # 排名team = str(i.xpath('./td[3]/a/text()')).replace("['", "").replace("']", "") # 球隊name = str(i.xpath('./td[2]/a/text()')).replace("['", "").replace("']", "") # 球員score = str(i.xpath('./td[4]/text()')).replace("['", "").replace("']", "") # 得分mzl = str(i.xpath('./td[6]/text()')).replace("['", "").replace("']", "") # 命中率sfmzl = str(i.xpath('./td[8]/text()')).replace("['", "").replace("']", "") # 三分命中率fqmzl = str(i.xpath('./td[10]/text()')).replace("['", "").replace("']", "") # 罰球命中率print(pm, name, team, score, mzl, sfmzl, fqmzl)data_dict = {'排名': pm, '球隊': team, '球員': name, '場均得分': score, '命中率': mzl, '三分命中率': sfmzl, '罰球命中率': fqmzl}csv_write.writerow(data_dict)f.close()得到的數(shù)據(jù)如下:
?(3)Excel數(shù)據(jù)可視化圖表:
打開“hpty”數(shù)據(jù)表,選擇“F1:G:11單元格區(qū)域”,然后單擊“插入”選項卡中的“查看所以圖表”按鈕,彈出“插入圖表”對話框,在“所有圖表”選項卡中的選擇“柱形圖”中的任意一種柱形圖類型,如右圖所示。
?(4)Tableau可視化圖表
打開Tableau工具,在開始界面選擇“連接到文件”,在對話框中將“hpty.csv”導入Tableau;單擊“Tableau-工作簿1”界面下方的“工作表1選項”,進入工作表1的界面中,將度量區(qū)域中的“球員”字段拖進到列功能區(qū),把度量值區(qū)域的“場均得分”拉進到行的功能區(qū),就可以得到垂直的柱形圖,如右圖所示。
(5) pyecharts可視化圖表:
代碼:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from pyecharts.charts import Bar from pyecharts import options as opts plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_csv(r'D:\努力學python\文章\hpty.csv') df2 = df['場均得分'][:10] df1 = df['球員'][:10] a = (Bar().add_xaxis(list(df1.values)).add_yaxis('球員場均得分', df2.values.tolist()).set_global_opts(title_opts=opts.TitleOpts(title='球員場均得分情況'),datazoom_opts=opts.DataZoomOpts()))a.render('pyecharts.html')?(6)Pandas數(shù)據(jù)可視化圖表
Pandas使用一維的數(shù)據(jù)結(jié)構(gòu)Series和二維的數(shù)據(jù)結(jié)構(gòu)DataFrame來表示數(shù)據(jù),Pandas可以存儲混合的數(shù)據(jù)結(jié)構(gòu)。
import pandas as pd import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False df = pd.read_csv(r'D:\努力學python\文章\hpty.csv') data = pd.DataFrame(list(df['場均得分'][:10]),index=df['球員'][:10])data.plot.bar(color='b') plt.show()?
總結(jié)
以上是生活随笔為你收集整理的网络爬虫+数据可视化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 离线部署CDH5.16.1及各种坑
- 下一篇: HDU1846 - Brave Game