[Python]爬蟲入門免費獲取天氣信息

三人行必有我師。大家可以對這篇文章提出一些建議,努力改進,共同學習。

雖然今年的計劃是考研,但是不敲代碼對我來說手癢癢,做了一個爬蟲,分享給大家共同學習。

 

目錄

1.信息爬取:

2.代碼實現獲取相應信息 

附上代碼: 

毛遂自薦:


 

1.信息爬取:

      1.找到一個實時更新且不需要花錢的天氣網站(企鵝天氣),我們第一步需要判斷這個網站是否像“白話文一樣好理解”,意思就是他是否會在網頁源代碼中直接提供給你你可以看到的信息。我們在網頁上右鍵->查看網頁源代碼

結果我們發現,他並不想直接告訴我們他的數據就放在源代碼裏,而需要我們去深入探索

       2. 第一步,我們發現查找源代碼的方法並不能得到我們所需要的數據,那我們接下來看一下網絡上是怎麼交互的吧。我們在網頁上右鍵-->檢查 ,或者可以按F12,不同的瀏覽器啓動的方式可能不太一樣(博主的瀏覽器是Chrome)。

企鵝天氣

     3.執行過第二步之後,我們選擇Network,並且刷新當前網頁,我們可以發現會有很多信息彈出。其實這些就是服務器和瀏覽器之間的交互,通過這個功能我們可以清晰的獲取到他們交互的內容是什麼。是否會有一些見不得人的東西(程序員的牢騷),大家都可以去探索(⊙o⊙)哦

      4.廢話不多說, 接下來我們分析這些文件到底是什麼,我們一步步的在密集的文字中查找帶有敏感詞彙(ip,common等等)的文件,就能很快定位到我們所需要的信息。

我根據敏感詞彙找到了如下文件,往後一拉,發現這不正是我們所需要的信息嗎,有地址,溫度,網頁上你所能看到的數值都在這個文件中。

5.但是我們還不能高興的太早,我們得判斷這個網址是否有效,就需要我們在瀏覽器中打開這個網址。 

1.複製網址->打開新的標籤頁打開網頁,或者直接右鍵->轉到(後者比較準確,不像我們人爲還會出錯)

2. 我們更改link中的

city = 徐州市
province = 江蘇省

刷新過後,發現內容和(企鵝天氣)信息對應,沒錯了,這個網站就是我們需要的網站。

如果大家覺得這樣子看着很難受,我們可以Ctrl-a,Ctrl-c,全文複製到在線json解析網站進行解析 推薦-->json,這樣我們就能清晰,有條理的進行json獲取信息了。

2.代碼實現獲取相應信息 

      1.同樣,我們複製剛剛獲取到的網址。

#https://wis.qq.com/weather/common?source=pc&weather_type=observe%7Cforecast_1h%7Cforecast_24h%7Cindex%7Calarm%7Climit%7Ctips%7Crise&province=江蘇省&city=徐州市

我們所用到的庫有:

import requests  # http請求庫
import re        # 正則表達式庫
import json      # json處理庫

      2.4行代碼實現獲取Response,其實只需要兩行代碼,我這裏保存到本地了 。

now_weather = requests.get("https://wis.qq.com/weather/common?source=pc&weather_type=observe%7Cforecast_1h%7Cforecast_24h%7Cindex%7Calarm%7Climit%7Ctips%7Crise&province="+省會+"&city="+城市
    with open('weather.txt','w+') as f:
        f.write(now_weather)
    f.close()

      3.通過json搜索任何一個想要的數據。不管那個想要的數據在哪,都能給他揪出來。

我們要獲取的是:data-->observe下的數據

操作很簡單,其餘數據都能這麼獲取,其實更高級的可以使用for循環實現 。

def get_all_informations():
    get_now_weather()
    with open("weather.txt") as f:
        information = f.read()
    f.close()
    json_information = json.loads(information) #解析成json格式
    if json_information['status']!=200:        #判斷數據獲取是否通暢
        print("數據源解析錯誤,請檢查數據源是否正確!")
    else:
        degree = json_information['data']['observe']['degree']                #溫度
        humidity = json_information['data']['observe']['humidity']            #溼度
        pressure = json_information['data']['observe']['pressure']            #氣壓
        weather = json_information['data']['observe']['weather']              #天氣狀況
        weather_code = json_information['data']['observe']['weather_code']    #天氣代碼,在網頁中起着選擇圖片的功能
        wind_direction = json_information['data']['observe']['wind_direction']#風向
        wind_power = json_information['data']['observe']['wind_power']        #鳳等級
        tips = json_information['data']['tips']['observe']['0']               #鳳等級

附上代碼: 

import requests
import re
import json
# 獲取當前的位置和ip地址
def get_ipaddress_location():
    r = requests.get('http://ip.tool.chinaz.com/').text
    ip = re.findall("<dd class=\"fz24\">(.*?)</dd>", r)
    location = re.findall("<dd>(.*?)<a href=\"", r)
    return location, ip

def get_now_weather():
    locations = ['','']
    location, ip = get_ipaddress_location()
    index = location[0].index('省');index2 = location[0].index('市')
    locations[0] = location[0][:index+1];locations[1] = location[0][index+1:index2+1]
    now_weather = requests.get("https://wis.qq.com/weather/common?source=pc&weather_type=observe%7Cforecast_1h%7Cforecast_24h%7Cindex%7Calarm%7Climit%7Ctips%7Crise&province="+locations[0]+"&city="+locations[1]).text
    with open('weather.txt','w+') as f:
        print(now_weather)
        f.write(now_weather)
    f.close()

def get_all_informations():
    get_now_weather()
    with open("weather.txt") as f:
        information = f.read()
    f.close()
    json_information = json.loads(information) #解析成json格式
    if json_information['status']!=200:        #判斷數據獲取是否通暢
        print("數據源解析錯誤,請檢查數據源是否正確!")
    else:
        degree = json_information['data']['observe']['degree']                #溫度
        humidity = json_information['data']['observe']['humidity']            #溼度
        pressure = json_information['data']['observe']['pressure']            #氣壓
        weather = json_information['data']['observe']['weather']              #天氣狀況
        weather_code = json_information['data']['observe']['weather_code']    #天氣代碼,在網頁中起着選擇圖片的功能
        wind_direction = json_information['data']['observe']['wind_direction']#風向
        wind_power = json_information['data']['observe']['wind_power']        #鳳等級
        tips = json_information['data']['tips']['observe']['0']               #鳳等級
    print("溫度:"+degree)

毛遂自薦:

大家可以多多支持我的其他博客。

《疫情讓我使用V-rep仿真(結合pythonAPI)實現機器人視覺巡線+pid調速》

我的個人博客:錫城小凱的博客

你們的支持就是對我的鼓勵~~

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