Python爬虫实战之 爬取全国理工类大学数量+数据可视化
上次爬取高考分數線這部分收了個尾,今天咱們來全面爬取全國各省有多少所理工類大學,并簡單實現一個數據可視化。話不多說,咱們開始吧。
第一步,拿到url地址
第二步,獲取高校數據
第三步,地圖可視化
第四步,調用函數實現需求
第一步,拿到url地址
這一部分需要導入這些庫:
import requests首先,拿到初始的url地址:
url_start='https://gkcx.eol.cn/school/search?recomschprop=%E7%90%86%E5%B7%A5'將“理工”進行轉碼處理,就變成了url后面那樣。
進入后頁面如下:
可以看到,共匹配到866所學校,共有44頁。感覺能繼續往下爬了嗎?別急,接著往下看。
我們先進行常規的get請求,發現得不到網頁信息。同時發現,這些高校數據并不在網頁源代碼中,怎么辦呢?
如果數據不在當前的url當中,要通過抓包工具network來分析數據,再通過search來查詢我們需要的數據。
我們先搜索關鍵字“重慶工程學院”,可以看到response獲取信息成功,切換到Headers處,能夠確定請求的方法為post請求,得到數據請求的真正url地址。
這就是真正的url地址:
其中page參數代表頁數,可以看到,page=1,以第1頁為例開始爬。通過遍歷即可獲取所有數據。其中post方式需提交一個data表單。
這一部分代碼如下:
# 獲取44頁的url i = 1 j = 0 links = [] while i <= 44:link = 'https://api.eol.cn/gkcx/api/?access_token=&admissions=¢ral=&department=&dual_class=&f211=&f985=&i s_dual_class=&keyword=&page={}&province_id=&request_type=1&school_type=&signsafe=&size=20&sort=view_ total&type=5001&uri=apigkcx/api/school/hotlists'.format(i)links = links + [link]i += 1獲取到的url列表如下,共有44條:
之后的代碼如下:
第二步,獲取高校數據
這一部分需要導入這些庫:
import json from collections import Counter # 尋找重復值運行以上代碼,可以發現所有數據存放在一個字典中。
現在我們需要做的,就是把高校名稱、城市字段提取出來。這一頁所有信息都存放在名為data的字典中,現在把字典拿出來。
由于數據是屬于json類型,所以要進行相應的轉換(轉化成python數據要用json.loads()命令),以便提取數據。
提取數據
def getdata(xinxi):shuju = json.loads(xinxi)['data']['item']可以發現,現在的數據存放到了一個列表中,咱們繼續提取。
# 大學名稱college = [i.get('name') for i in shuju]# 所在省份province = [i.get('province_name') for i in shuju]# 所在城市city = [i.get('city_name') for i in shuju]現在要找到各省份的理工類高校數量:
# 尋找同一省份的學校個數a = dict(Counter(province))# 尋找重復項目和重復個數b = {key:value for key,value in a.items() if value >= 1}return b第三步,地圖可視化
上面我們得到了省份及理工類大學數量,現在需要把分布地圖繪制出來。需要注意的是,要把pyecharts版本切換為1.6.2。
這一部分需要導入這些庫:
具體代碼如下:
def painting(b):xuexiao = list(zip(b.keys(),b.values()))c = (Map(init_opts=opts.InitOpts(width="1000px", height="600px")) #可切換主題.set_global_opts(title_opts=opts.TitleOpts(title="各省理工類高校分布圖 單位:個"),visualmap_opts=opts.VisualMapOpts(min_=0,max_=100,range_text = ['理工類高校數量區間:', ''], #分區間is_piecewise=True, #定義圖例為分段型,默認為連續的圖例pos_top= "middle", #分段位置pos_left="left",orient="vertical",split_number=10 #分成10個區間)).add("高校數量",xuexiao,maptype="china").render("理工類高校分布圖.html") )return c第四步,調用函數實現需求
前面三步中,咱們通過函數來實現了爬取數據和地圖可視化的功能。現在需要在最后加上一個main方法,來調用前面的函數,從而實現最終需求。
if __name__ == '__main__':# 1.獲取每一個列表頁url及源碼數據xinxi = [geturl(links[i]) for i in range(44)]# 2.獲取每一頁的學校數據b = [getdata(xinxi[i]) for i in range(44)]print(b)# 3.進行數據整理(將每一頁的數據匯總)i = 0while i <= 42:for k,v in b[i].items():if k in b[i+1].keys():b[i+1][k] += velse:b[i+1][k] = vi += 1# print(b[43])c = b[43] # 將匯總結果賦值給c# 4.繪出地圖xuexiao = list(zip(c.keys(),c.values()))# print(xuexiao)map = painting(c)其中,第2步的結果如下,此時各省份數量還未匯總:
第3步的結果如下,此時各省份數量已經匯總完畢:
第4步的結果如下,此時是打包好的將要用于繪圖的數據:
運行整個程序后,得到了這樣一幅地圖,咱們實現了地圖可視化:
至此,咱們已經統計出全國的理工類大學在各省份的數量分布,實現了爬蟲和數據可視化的完美結合。
?
?
?
第一篇:Python的要點(搭建環境、安裝配置、第三方庫導入方法詳細過程)
第二篇:Python爬蟲初探(一)——了解爬蟲
第三篇:Python爬蟲初探(二)——爬蟲的請求模塊
第四篇:Python爬蟲初探(三)——爬蟲之正則表達式介紹
第五篇:Python爬蟲初探(四)——爬蟲之正則表達式實戰(爬取圖片)
第六篇:Python爬蟲初探(五)——爬蟲之xpath與lxml庫的使用
第七篇:Python爬蟲初探(六)——爬蟲之xpath實戰(爬取高考分數線信息)
第八篇:Python爬蟲初探(七)——爬蟲之Beautifulsoup4介紹(Ⅰ)
第九篇:Python爬蟲初探(八)——爬蟲之Beautifulsoup4介紹(Ⅱ)
第十篇:Python爬蟲初探(九)——爬蟲之Beautifulsoup4實戰(爬取豆瓣信息)
總結
以上是生活随笔為你收集整理的Python爬虫实战之 爬取全国理工类大学数量+数据可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python tempstr 转换面积
- 下一篇: 1月VR大数据:Quest 2增长2.9