Python爬蟲學習筆記(八)——智高考數據爬取


介紹

智高考是一個高考志願網站,也是基於Ajax的。高中的時候我在wyz大神的幫忙下,嘗試過爬取信息來為填志願做准備。但是當時沒有系統學習過爬蟲,幾乎都是靠大神帶飛,因此今天再次嘗試爬取智高考的大學信息。(數據全部基於智高考,侵刪)
該網站有多種查詢模式,我打算爬取的有兩種。
1.各省份的本科大學
2.各學科的本科大學

正文

各省份的本科大學

首先分析Ajax,可以看到URL為:

http://www.zhigaokao.cn/university/getRemoteUniversityList.do?userKey=www&req=ajax&universityName=&areaid=110000&type=&educationLevel=1&property=&offset=0&rows=10

其中universityName、type、property均可省略,因為我們沒有傳入數據。然后通過字面翻譯可以知道,areaid是地區代碼的意思,也就是代表着各個省份(直轄市)。這里可以選擇網上搜索所有省份代碼,預處理弄好,這也是我曾經的做法。但是今天我打算直接從網站上爬取所有省份代碼。
直接刷新界面,可以看到有好幾條xhr信息,仔細觀察就能發現其中一條就是存着省份代碼的信息。

接下來事情就簡單了,用requests讀取信息,然后解析就可以了,代碼如下

def get_id():
	url = 'http://www.zhigaokao.cn/university/getRemoteProvinceList.do?'
	payload = {
			'userKey': 'www',
			'req': 'ajax',
		}
	response = requests.get(url, headers=headers, params=payload)
	items = response.json().get('bizData')
	IDs = []
	for item in items:
		IDs.append(item.get('id'))
	return IDs

獲取省份代碼之后,就可以傳入之前的params中,通過offset來爬取所有信息。

各學科的本科大學

這里比較麻煩的如何傳遞專業。按照智高考的專業分級有三級,因此我打算一二級用文件夾的形式存,三級作為文件的命名。總的思路和上面的類似,就不細細贅述了。我遭遇到的主要問題就是json結構層次太多,經常會搞暈,然后我沒有一開始定下怎么按層次解析,因此踩了不少坑。說到底應該算是基礎不扎實、代碼量太少的原因吧。

還有要提及的一點是,我本打算先爬取所有專業大類存在list里,然后發現這樣和最后的學校不容易匹配上,發現最終的json中其實也有專業大類的名稱,因此又重新修改了代碼,改為直接解析學校的URL。

總結

通過這次實踐,解決了曾經遺留的一些問題,也搞清楚如何解決Ajax的問題了。不過也發現了一些還不夠的地方。一個是事先對代碼的結構沒有考慮清楚,導致多次重構代碼,浪費了不少時間;另一個是python基礎不夠扎實,對list之類的基本數據結構運用的不熟練。
本次實踐代碼開源在github


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM