日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

轻松实现全国高校地理位置数据爬取

發布時間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轻松实现全国高校地理位置数据爬取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個城市的歷史底蘊,不光可以從經濟、文化和人文景點,還可以從高校的數量可以看出來。所以,今天就來試試如何爬取全國高校的分布數據。

天要爬取的網站是:中國教育在線,對應的網址是:https://gkcx.eol.cn/school/search

因為對應的是位置點,所以最主要的應該是經緯度點坐標數據。

但是在該網站中無法獲取到高校的經緯度數據,所以在文末會教你利用地址解析的方式獲取到經緯度坐標。

以下是正文:

爬蟲流程

打開對應網址后,F12 打開開發者工具,切換到 Network 選項卡下的 XHR

通過在網頁中點擊 上一頁下一頁 按鈕可以發現有如下的請求:

多次點擊后可以發現對應的只是請求參數 page 在發生變化

對應每一頁的請求參數 page 對應的該頁在整個數據集中所處的位置

而總的數據集個數在每個請求的 response 中可以獲取到

從而通過 總個數/每頁個數=頁面數 確定總的請求次數

在每次請求的響應中可以看到返回的數據有很多,包括:高校地址、所在城市、地區、直屬機構、類別、是否雙一流 以及對應的瀏覽次數等數據

綜上,前期的數據爬取中,總體流程如下:

  • 獲取總記錄數,計算請求次數

  • 遍歷請求次數,構造每一次請求的 url

  • 解析并獲取數據

最后,通過百度地圖反向解析高校的經緯度數據,這個在文末會介紹到

爬蟲實現

基于上面的爬蟲流程,依次進行爬蟲的代碼實現

首先是獲取到總記錄數,

url?=?'url' res?=?requests.post(url,?headers={'User-Agent':?get_ua()}) data?=?json.loads(res.text)#?解析數據 if?data["message"]?==?'成功':size?=?data["data"]["numFound"]

由于每次請求返回的數據是 JSON 格式,通過上述方式可以直接獲取到總記錄數

從而可以很方便的計算出總請求次數:

#?計算請求次數 page_cnt?=?int(size/page_size)?if?size%page_size==0?else?int(size/page_size)+1 print('一共{0}頁數據'.format(page_cnt))

其次, 遍歷請求次數,構造每一次的請求 url

其實主要是更新下標 index

for?index?in?range(1,?page_cnt+1):print('正在爬取第?{0}/{1}?頁數據'.format(index,?page_cnt))url?=?'https://api.eol.cn/gkcx/api/?access_token=&admissions=&central=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page={0}&province_id=&ranktype=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&top_school_id=[2941]&type=&uri=apidata/api/gk/school/lists'?\.format(index)res?=?requests.post(url,?headers={'User-Agent':?get_ua()})data?=?json.loads(res.text)

最后是解析每一頁的數據

由于數據是 JSON 格式,可以很方便的通過 DataFrame 進行轉換

#?解析數據 if?data["message"]?==?'成功':df_data?=?pd.DataFrame(data["data"]["item"])df_result?=?df_result.append(df_data)

最后對整體數據進行保存即可。

地址解析,匹配經緯度

地址解析主要是通過百度開發者平臺,對高校的地址進行解析

平臺提供的接口是這樣的:

對應的,我們將每個 高校的地址 作為 query 參數,將 省份+城市 作為 region 參數,設置 tag 為 高等院校,構造訪問 url

相應的代碼如下:

df_data?=?pd.read_csv(filepath,?encoding='gbk') for?row_index,?data_row?in?df_data.iterrows():region?=?data_row['province_name']+data_row['city_name']query?=?data_row['name']url?=?'http://api.map.baidu.com/place/v2/search?query={0}&tag={1}&region={2}&output=json&ak={3}'.format(query,?"高等院校",?region,??'你的key')

最后是對每次的請求進行解析,獲取到百度地圖返回的經緯度數據

思路比較簡單,相應代碼如下:

res?=?requests.get(url,?headers={'User-Agent':?get_ua()}) data?=?json.loads(res.text) if?len(data["results"])?>?0:df_data?=?pd.DataFrame(data["results"])df_data['lat']?=?df_data['location'].apply(lambda?x:?x['lat'])df_data['lng']?=?df_data['location'].apply(lambda?x:?x['lng'])#?返回數據bd_lng?=?df_data.loc[0,?"lng"]bd_lat?=?df_data.loc[0,?"lat"]

個人開發者在百度開放平臺每天有 3w 次地點檢索的免費配額,在使用的時候可以注意下

本次的高校數據集大概不到 3000 條,建議在運行之前可以先寫好測試 demo

最終數據及效果

爬取到的高校數據共 2827 條,每個數據 46 個字段

部分數據截圖如下:

將高校經緯度打在地圖上,分布是這樣的:

這份數據和目前教育部公布的數據還是有一些小小的出入,但是在可容忍范圍之內,所以誤差可以暫時忽略。

-?END -

本文為轉賬分享&推薦閱讀,若侵權請聯系后臺刪除 ------------------------------------- 長按識別下方二維碼,并關注公眾號1.回復“PY”領取1GB?Python數據分析資料2.回復“BG”領取3GB 名企數據分析報告

總結

以上是生活随笔為你收集整理的轻松实现全国高校地理位置数据爬取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。