1. 程式人生 > 其它 >爬取中國大學排名變化資料與視覺化分析

爬取中國大學排名變化資料與視覺化分析

一、選題背景

高考作為中國學生生涯中最為重要的事,在高考之後,選擇一所好的大學則是接下的人生的一塊的敲門磚,選擇有著好的大學,和有著良好教育氛圍的城市以及所選擇的大學近年來的變化是很重要的事,在以前,想要了解這些需要翻閱查詢大量的資料,而現在我們可以通過python輕易地瞭解這些。

二、爬蟲方案設計

1.方案名稱:

  中國大學年排名變化資料與視覺化分析

2.爬取的內容與資料特徵分析:

  通過網站收錄的中國大學截止到2019年的排名(因為2020到2021年的疫情對排名變化)

3. 方案概述

  分析網站頁面結構,找到爬取資料的位置,根據不同的資料制定不同的爬取方法

三、網站頁面結構分析

1.網頁頁面的結構與特性分析

  通過瀏覽器“審查元素”檢視原始碼及“網路”反饋

可以看到每一個tr裡面都有一行資料,這就是所需要的資料

四、爬蟲程式設計

1. 資料的爬取

 1 import requests
 2 from lxml import html
 3 def Tree(url):
 4     req = requests.get(url)
 5     req.encoding ='utf-8-sig'
 6     allUniv = []
 7     tree = html.fromstring(req.text)
 8     trs = tree.xpath('
//tbody/tr') 9 for tr in trs: 10 tds = tr.xpath('td') 11 if tds == 0: 12 continue 13 oneUniv=[] 14 oneUniv.append(tds[0].text) 15 name = tds[1].xpath('div') 16 oneUniv.append(name[0].text) 17 for td in tds[2:]: 18 oneUniv.append(td.text)
19 allUniv.append(oneUniv) 20 return allUniv 21 22 url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html' 23 tree=Tree(url) 24 print("排名 學校名稱 省市 總分") 25 for i in range(20): 26 print(tree[i][0],tree[i][1],tree[i][2],tree[i][3],sep=' ') 27 28 from bs4 import BeautifulSoup 29 def Req(url): 30 req=requests.get(url) 31 req.encoding='utf-8-sig' 32 allUniv=[] 33 soup=BeautifulSoup(req.text,"html.parser") 34 trs=soup.find_all('tr') 35 for tr in trs: 36 tds=tr.find_all('td') 37 if len(tds)==0: 38 continue 39 oneUniv=[] 40 for td in tds: 41 oneUniv.append(td.string) 42 allUniv.append(oneUniv) 43 return allUniv 44 45 allUniv1=Req(url) 46 print("排名 學校名稱 省市 總分") 47 for i in range(20): 48 print(allUniv1[i][0],allUniv1[i][1],allUniv1[i][2],allUniv1[i][3],sep=' ') 49 50 import matplotlib.pyplot as plt 51 plt.rcParams["font.sans-serif"]=["SimHei"] 52 name=[] 53 sorce=[] 54 for i in range(10): 55 name.append(allUniv1[i][1]) 56 sorce.append(float(allUniv1[i][3])) 57 plt.barh(range(len(sorce)),sorce,tick_label=name) 58 plt.title("2019年排名前十位的大學及其總分") 59 plt.xlabel('分數') 60 plt.show() 61 62 from collections import Counter 63 province=[] 64 for i in range(len(allUniv1)): 65 province.append(allUniv1[i][2]) 66 result=Counter(province) 67 print(result)

2.資料簡單分析且視覺化

(1)繪製餅狀圖

1 import matplotlib as mpl
2 mpl.rcParams["font.sans-serif"]=["SimHei"]
3 mpl.rcParams["axes.unicode_minus"]=False
4 plt.pie(result.values(),labels=result.keys(),radius=2)
5 plt.title("各省份大學數量佔比餅狀圖")
6 plt.show()

(2)繪製柱狀圖

 1 def DXAnly():
 2     area_count = df.groupby(by='area').area.count().sort_values(ascending=False)
 3     # 繪圖方法1
 4     area_count.plot.bar(color='#4652B1')  # 設定為藍紫色
 5     pl.xticks(rotation=0)  # x軸名稱太長重疊,旋轉為縱向
 6     for x, y in enumerate(list(area_count.values)):
 7         plt.text(x, y + 0.5, '%s' % round(y, 1), ha='center', color=colors1)
 8     plt.title('各地區大學數量排名')
 9     plt.xlabel('地區')
10     plt.ylabel('數量(所)')
11     plt.show()

通過所繪製柱狀圖與餅狀圖,我們可以清晰地看出優秀大學在各個省份佔比,在選擇大學的時候,可以優先選擇教育資源更加多源,高等教育水平更高的省份城市,

其中前三名的地區是北京、江蘇、上海,經濟水平較為發達的地區,可以簡單的看見高素質教育水平可以影響地區經濟的發展。

(3)繪製折線圖

選擇一所大學,檢視這所大學今年來的排名變化,這裡選擇北京郵電大學

 1 sorce2=[]
 2 for i in range(4):
 3     url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming'+str(i+2016)+'.html'
 4     allUniv=Req(url)
 5     for i in range(len(allUniv)):
 6         if  allUniv[i][1]=="北京郵電大學":
 7             j=i
 8             break
 9     sorce2.append(float(allUniv[j][3])) 
10 print(sorce2)
11 
12 years=[2016,2017,2018,2019]
13 plt.subplot(1,1,1)
14 plt.plot(years,sorce2,marker='o')
15 plt.grid(True)
16 plt.title("北京郵電大學2016-2019年評分走勢")
17 plt.xlabel('')
18 plt.ylabel('分數')
19 plt.show()

五、總結

一所好的大學,對人生的影響是非常巨大的,在力所能及的範圍內選擇一所位於教育資源更加多源,高等教育水平更高的省份城市的優秀大學是非常重要的事,作為判斷標準的資料,在以往單單是一所大學的相關資料就需要通過大量、繁瑣的查詢與翻閱才能夠得到,若是多所大學的多年的變化則需要更多的時間。而現在通過python的則能夠相對輕鬆的得到。