python爬取2345天氣網氣象數據

** python爬取2345天氣網氣象數據**
由於科研需要,我需要獲取有關PM2.5數據的氣象要素,因此準備爬取2345天氣網的數據,參考了網上方法,很多都介紹的不都詳細,有的都失效了,因此這裏簡單介紹一下我的方法,供大家參考(方法不唯一)!
首先我研究的對象是北京,因此我搜索 北京的天氣數據,如圖所示:
在這裏插入圖片描述然後我打開審查元素,點擊Network,發現54511_202003.js這裏存在我們所需要的json數據,如下圖因此我們只需要能夠獲取到這裏的json數據即可。
在這裏插入圖片描述
點擊Headers,如下圖
在這裏插入圖片描述
發現Request URL就是我們需要的json數據的鏈接,可以點擊該鏈接看看,如下:
在這裏插入圖片描述
事實證明我們的猜想是對的,因此,我們只要在這個json數據裏提取我們所需要的數據即可。
附上我的全部代碼:

import requests
import pandas as pd
import re
months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
years = [2017, 2018, 20192020]
city = [54511]  # 北京代碼54511,也可以設置其他城市
index_ = ['MaxTemp','MinTemp', 'WindDir', 'Wind', 'Weather']  # 選取的氣象要素
data = pd.DataFrame(columns=index_)  # 建立一個空dataframe
for y in years:
    for m in months:
        for c in city:
            # 找到json格式數據的url
            url = "http://tianqi.2345.com/t/wea_history/js/"+str(y)+str(m)+'/'+str(c)+"_"+str(y)+str(m)+".js"
            print(url)
            response = requests.get(url=url)
            if response.status_code == 200:  # 防止url請求無響應
                response2 = response.text.replace("'", '"')  # 這一步可以忽略
                #  利用正則表達式獲取5個氣象要素(方法不唯一)
                date = re.findall("[0-9]{4}-[0-9]{2}-[0-9]{2}", response2)[:-2] # 去除最後兩個無關的數據
                mintemp = re.findall('yWendu:"(.*?)℃', response2)
                maxtemp = re.findall('bWendu:"(.*?)℃', response2)
                winddir = re.findall('fengxiang:"([\u4E00-\u9FA5]+)', response2)
                wind = re.findall('fengli:"(\d)[\u4E00-\u9FA5]+', response2)
                weather = re.findall('tianqi:"([[\u4E00-\u9FA5]+)~?', response2)
                data_spider = pd.DataFrame([maxtemp,mintemp, winddir, wind, weather]).T
                data_spider.columns = index_  # 修改列名
                data_spider.index = date  # 修改索引
                data = pd.concat((data,data_spider), axis=0)  # 數據拼接
                print('%s年%s月的數據抓取成功' % (y, m))
            else:
                print('%s年%s月的數據不存在' % (y, m))
                break
data.to_excel('weatherdata.xlsx',)
print('爬取數據展示:\n', data)

代碼附有詳細註釋,應該可以看的懂,如有問題請留言,其中可以通過調節年份,城市等獲取你們想要的數據,該程序跑出結果如下圖:
在這裏插入圖片描述
由於現在是2020年3月份,因此後面月份的數據不存在,每個url鏈接都是所需要的json數據。
我將數據保存到了Excel裏,如下
在這裏插入圖片描述
當然也可以將它放到數據庫裏都可以,具體點這裏就不介紹了!覺得該博客有用的還希望點個贊支持一下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章