爬取大學排名和NBA球星數據並進行多維度可視化

opexcel 模塊地址:https://blog.csdn.net/wei_zhen_dong/article/details/105318970

import requests
from lxml import etree
from opdata.opexcel import Operatingexcel
import pyecharts.options as opts
from pyecharts.charts import Radar
def use_requsert_dome():
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
    }
    response = requests.get(url,headers)

    if response.status_code == 200:
        # 編碼解碼
        html = response.text.encode('iso-8859-1').decode('utf-8')
        return html
    else:
        return None
def text_to_dic(text):
    dict = {}
    html = etree.HTML(text)
    pags = html.xpath('/html/body/div[3]/div/div[2]/div/div[3]/div/table/tbody')

    for i in pags:
        id = i.xpath('//tr/td[1]/text()')
        name = i.xpath('//tr/td[2]/div/text()')
        province = i.xpath('//tr/td[3]/text()')
        # 總分
        score = i.xpath('//tr/td[4]/text()')
        #生源質量
        quality = i.xpath('//tr/td[5]/text()')
        # 培養結果
        employment = i.xpath('//tr/td[6]/text()')
        # 科研規模
        srs = i.xpath('//tr/td[7]/text()')
        # 科研質量
        fwci = i.xpath('//tr/td[8]/text()')
        # 頂尖成果
        topresults = i.xpath('//tr/td[9]/text()')
        # 頂尖人才
        elite = i.xpath('//tr/td[10]/text()')
        # 經費
        expenditure = i.xpath('//tr/td[11]/text()')
        # 成果轉化
        at = i.xpath('//tr/td[12]/text()')
    dict["id"]=id
    dict["name"] = name
    dict["province"] = province
    dict["score"] = score
    dict["quality"] = quality
    dict["employment"] = employment
    dict["srs"] = srs
    dict["fwci"] = fwci
    dict["topresults"] = topresults
    dict["elite"] = elite
    dict["expenditure"] = expenditure
    dict["at"] = at
    return dict

def draw(arr,value,valuemax,name):
    radar=Radar(init_opts=opts.InitOpts(width="1280px", height="720px", bg_color="#CCCCCC"))
    v_max=[list(z)for z in zip(arr,valuemax)]
    radar.add_schema(
        schema=[
            opts.RadarIndicatorItem(name=k, max_=v)for k,v in v_max
        ],
        splitarea_opt=opts.SplitAreaOpts(
            is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
        ),
        textstyle_opts=opts.TextStyleOpts(color="#fff"),
    )
    radar.add(
        series_name=name,
        data=value,
        linestyle_opts=opts.LineStyleOpts(color="#CD0000"),
    )
    radar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    radar.set_global_opts(
        title_opts=opts.TitleOpts(title=name), legend_opts=opts.LegendOpts()
    )
    radar.render("{0}.html".format(name))

if __name__ == '__main__':
    text = use_requsert_dome()
    if text != None:
        dict = text_to_dic(text)
    arr = ["總分", "生源質量", "科研規模", " 科研質量", "頂尖成果", "經費", "成果轉化"]
    valuemax = [100, 100,40000, 1.5,1200,1200000,1200]
    ol = Operatingexcel()
    ol.set_excel_dic(dict,"data\csdn_data.xlsx",0,0)
    dics = ol.get_excel_dic("data\csdn_data.xlsx","大學排名")
    for i in range(int(dics["id"][-1])):
        name = dics["name"][i]
        score = dics["score"][i]
        quality = dics["quality"][i]
        srs = dics["srs"][i]
        fwci = dics["fwci"][i]
        topresults = dics["topresults"][i]
        expenditure = dics["expenditure"][i]
        at = dics["at"][i]
        value = [[score, quality, srs, fwci, topresults,expenditure,at]]
        draw(arr, value, valuemax, name)

數據爲2016年的又點老舊,不過也就是爲了練習
清華大學:
在這裏插入圖片描述
齊齊哈爾大學:
在這裏插入圖片描述
北京大學:
在這裏插入圖片描述
這裏放一個NBA球星數據,有興趣的也可以做一個球星的能力緯度分析
爬取虎撲體育NBA球星數據:

import requests
from lxml import etree
from opdata.opexcel import Operatingexcel

# 小例子,獲取虎撲體育NBA球星數據
def use_requsert_dome():
    url = 'https://nba.hupu.com/stats/players'

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
    }
    response = requests.get(url,headers)
    if response.status_code == 200:
        return response.text
    else:
        return None
def text_to_dic(text):
    dict = {}
    html = etree.HTML(text)
    pags = html.xpath('//*[@id="data_js"]/div[4]/div/table/tbody')
    for i in pags:
        name = i.xpath('//tr/td[2]/a/text()')
        team = i.xpath('//tr/td[3]/a/text()')
        score = i.xpath('//tr/td[4]/text()')
        hit_shoot = i.xpath('//tr/td[5]/text()')
        hit_rate = i.xpath('//tr/td[6]/text()')
        hit_rate_3 = i.xpath('//tr/td[8]/text()')
        hit_rate_f = i.xpath('//tr/td[10]/text()')
        session = i.xpath('//tr/td[11]/text()')
        time = i.xpath('//tr/td[12]/text()')
    dict["name"]=name
    dict["team"] = team
    dict["score"] = score[1:]
    dict["hit_shoot"] = hit_shoot[1:]
    dict["hit_rate"] = hit_rate[1:]
    dict["hit_rate_3"] = hit_rate_3[1:]
    dict["hit_rate_f"] = hit_rate_f[1:]
    dict["session"] = session[1:]
    dict["time"] = time[1:]
    return dict

if __name__ == '__main__':
    text = use_requsert_dome()
    if text != None:
        dict = text_to_dic(text)
        ol = Operatingexcel()
        ol.set_excel_dic(dict,"data\csdn_data.xlsx",0,0)

因爲比較簡單,所以沒有太多註釋,如果有疑問也可以參考我之前的博客。

由於我的水平有限,文章中難免有不妥和錯誤之處,真誠的希望路過的大佬,能在評論區批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章