爬蟲與Python:(四)爬蟲進階一之資料抓取——2.Python模擬Ajax
阿新 • • 發佈:2021-10-21
如何用用Python模擬Ajax請求,我們仍然以飛常準大資料為例(https://data.variflight.com/analytics/CodeQuery),通過查詢北京機場的三個字母碼“PEK”來請求獲取它的資料,把北京機場的資訊提取出來。
分析請求和響應結果
詳細的Chrome開發者工具使用方法以及“airportCode”的響應請求獲取方法不在贅述了。這裡直接上分析結果:
- 請求連結:https://data.variflight.com/analytics/Codeapi/airportCode
- 請求方法:POST
- 請求資料:{key:"PEK" , page : 0} 。key就是輸入“PEK”要查詢的三字碼,page是頁碼。
分析了請求結果,接下來我們分析響應結果如圖1所示:
圖1
- code:代表響應狀態碼是失敗還是成功。
- data: 我們想要的內容,裡面包含了北京機場的相關資訊。
- message: 提示資訊。
編寫程式碼
下面使用Python的requests庫編碼程式碼來模擬資料。首先定義一個方法來獲取每次請求的結果。在請求時,key和page是一個可變引數,所以將它們作為方法的引數傳遞進來,相關示例程式碼如下:
1 # 模擬抓取飛常準大資料的機場資訊 2 import json 3 import requests 4 5 ''' 6 獲取請求資料 7 @:param key 查詢關鍵字8 @:param page 頁碼(預設為0) 9 ''' 10 def get_data(key,page = 0): 11 url = "https://data.variflight.com/analytics/Codeapi/airportCode" 12 data = { 13 "key":key, 14 "page" :page 15 } 16 res = requests.request("post",url , data=data) 17 return res.text 18 19 ''' 20 獲取解析結果 21 @:param data22 ''' 23 def get_parse(data): 24 return json.loads(data) 25 26 data = get_data("PEK" , 0) 27 apt_info = get_parse(data) 28 print(apt_info,apt_info["data"])
執行結果如下:
另外,如何將儲存的資料儲存到資料庫或Excel中?將會在後面講到。
有志者,事竟成,破釜沉舟,百二秦關終屬楚; 苦心人,天不負,臥薪嚐膽,三千越甲可吞吳。