【爬蟲學習二】 python通過API爬取各城市天氣預報資料

2020-10-03 11:00:07

需要用的連結和網址:

註冊免費APIhttp://console.heweather.com

國內城市IDhttp://cdn.heweather.com/china-city-list.txt

介面https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=xxx
(key後的xxx填入key,location後的xxx填寫城市ID)

json編輯器http://www.json.org.cn/tools/JSONEditorOnline/index.htm


首先,先註冊一個免費的API:
不會的可以看這個 傳送,做前兩個步驟就可以。


一:獲取國內城市資訊

import requests

url = 'http://cdn.heweather.com/china-city-list.txt'  #國內城市ID

data = requests.get(url)  #獲取網頁資料

data.encoding = 'utf8' #資料的編碼方式為utf8,否則會亂碼

print(data.text)

執行結果:
在這裡插入圖片描述


二: 處理資料

(1)前 6 行的資料是不需要的,應該刪除
在這裡插入圖片描述


(2)在介面的連結中我們發現,還需要在localtion後填入城市ID,從輸出結果中可以看出,城市ID在每行的下標第2-12的位置

import requests

url = 'http://cdn.heweather.com/china-city-list.txt'  #國內城市ID

data = requests.get(url)  #獲取網頁資料

data.encoding = 'utf8' #資料的編碼方式為utf8,否則會亂碼

data1 = data.text.split("\n") #通過split將文字轉換為列表

for i in range(6):   #刪除前6行不需要的資料
    data1.remove(data1[0])

for item in data1:  #找出城市ID
    print(item[2:13])

執行結果:

在這裡插入圖片描述


三:獲取JSON格式的資料

import requests
import time

url = 'http://cdn.heweather.com/china-city-list.txt'  #國內城市ID

data = requests.get(url)  #獲取網頁資料

data.encoding = 'utf8' #資料的編碼方式為utf8,否則會亂碼

data1 = data.text.split("\n") #通過split將文字轉換為列表

for i in range(6):   #刪除前6行不需要的資料
    data1.remove(data1[0])

for item in data1:
    #介面連結中的key後面的xxx改為自己剛剛註冊的key,location後加上城市ID
    url = 'https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=' + item[2:13]

    data2 = requests.get(url)

    data2.encoding = 'utf8'

    #time.sleep(1)  #延時函數程式碼,避免存取伺服器過於頻繁,每次存取等待1s(這裡可以不加)

    print(data2.text)


執行結果:
在這裡插入圖片描述


四:解析JSON資料

(1)開啟 JSON線上編輯器,觀察資料結構

在這裡插入圖片描述

(2)通過觀察路徑,列印需要的資訊,例如找出各城市當日的最高和最低氣溫

import requests
import time

url = 'http://cdn.heweather.com/china-city-list.txt'  #國內城市ID

data = requests.get(url)  #獲取網頁資料

data.encoding = 'utf8' #資料的編碼方式為utf8,否則會亂碼

data1 = data.text.split("\n") #通過split將文字轉換為列表

for i in range(6):   #刪除前6行不需要的資料
    data1.remove(data1[0])

for item in data1:
    #介面連結中的key後面的xxx改為自己剛剛註冊的key,location後加上城市ID
    url = 'https://free-api.heweather.net/s6/weather/forecast?key=xxx&location=' + item[2:13]

    data2 = requests.get(url)

    data2.encoding = 'utf8'

    #time.sleep(1)  #避免存取伺服器過於頻繁,每次存取等待1s(這裡可以不加)

    dic = data2.json()

    for item in dic["HeWeather6"][0]["daily_forecast"][:1]: #[:1]只要今日天氣資訊
        result = {
            '城市':dic["HeWeather6"][0]["basic"]["location"],
            '今日最高溫度':item["tmp_max"],
            '今日最低溫度':item["tmp_min"]
        }
        print(result)

執行結果:
在這裡插入圖片描述