最近天氣降溫厲害,咱們用Python來分析一下空氣質量如何~ 話不多說,我們直接開始上手。 環境以及模塊 環境使用 Python 3.8 Pycharm nodejs 模塊使用 import requests import execjs import json requests和execjs 都是第 ...
最近天氣降溫厲害,咱們用Python
來分析一下空氣質量如何~
話不多說,我們直接開始上手。
環境以及模塊
環境使用
- Python 3.8
- Pycharm
- nodejs
模塊使用
- import requests
- import execjs
- import json
requests
和execjs
都是第三方模塊,需要手動安裝,直接pip install 加上模塊名字即可。
思路流程
一. 數據來源分析
-
明確需求:
明確採集的網站以及數據
- 網站: 目標網址
- 數據:
空氣質量相關數據
-
抓包分析:
通過瀏覽器自帶的開發者工具分析數據
- 打開開發者工具: F12
- 刷新網頁
- 通過關鍵字搜索查詢對應數據包位置
二. 代碼實現步驟
- 發送請求 -> 模擬瀏覽器對於url地址發送請求
- 獲取數據 -> 獲取伺服器返迴響應數據
- 解析數據 -> 提取具體數據內容
- 保存數據 -> 保存表格文件中
代碼展示
定義月份列表,用於迴圈請求數據。
month_list = ['202301', '202302', '202303', '202304','202305','202306','202308','202309','202310']
迴圈請求每個月份的數據
for month in month_list:
發送請求
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 請求鏈接 # 完整的源碼和視頻講解我都打包好 # 在這個摳裙自取 708525271 url = 'https://www.aqistudy.cn/historydata/api/historyapi.php'
調用JS代碼獲取加密參數
# 讀取js文件 data_file = open('data.js', 'r', encoding='utf-8').read() # 編譯JS代碼 data_code = execjs.compile(data_file) # 參數 m0fhOhhGL = "GETDAYDATA" oNLhNQ = { "city": "北京", "month": month } # 調用js代碼函數 hA4Nse2cT = data_code.call('post_data', m0fhOhhGL, oNLhNQ) print('加密的請求參數: ', hA4Nse2cT) # 請求參數 data = { 'hA4Nse2cT': hA4Nse2cT } # 發送請求 response = requests.post(url=url, data=data, headers=headers).text
解密響應加密數據
# 讀取文件 response_file = open('response.js', 'r', encoding='utf-8').read() # 編譯文件 response_code = execjs.compile(response_file) # 調用js函數 result = response_code.call('dxvERkeEvHbS', response) print('加密的響應數據: ',response) print('明文響應數據: ',result)
保存數據
將解密後的數據保存到Excel文件中
json_data = json.loads(result) content_list = [] for index in json_data['result']['data']['items']: content_list.append(index) df_data = pd.DataFrame(content_list) df_data.to_excel(f'{month}.xlsx', index=False)
效果展示
好了今天的內容就分享到這,下次見~