Python爬取中國天氣網天氣資料

2021-08-10 00:15:04 字數 2168 閱讀 4438

由於一些需要,想要獲取今天的天氣資料,於是又撿起了python寫了個爬蟲用來獲取中國天氣網上的氣象資料。由於我需要的資料比較簡單,因為我只需要北京地區當天的溫度(最低溫度和最高溫度)和天氣,因此**部分比較簡單,下面就來講講這個爬取的過程。

第一步 網頁分析

要進行爬蟲設計,首先得分析網頁的請求過程。首先,開啟中國天氣網首頁,在搜尋框中搜尋北京,檢視北京地區的天氣,如下圖所示:

發現在今天的資料欄中並沒有我要的最低溫度和最高溫度,於是又選擇了「7天」鏈結,截圖如下:

這時候我想要的資料(最低溫度、最高溫度)就有了,接下來就該分析網頁的請求過程了。通過對比分析「今天」頁面和「7天」頁面發現,該**的請求都是簡單的get的請求。

以請求「7天」頁面為例,請求的url如下:

url=「

其中,「weather」代表請求的是「7天」,如果是請求「今天」則是「weather1d「;後面的「101010100」則代表了北京地區的編號。

既然url已經搞清楚了,那麼就下來就要分析網頁原始碼,找到資料在原始碼中呈現位置,經過一番尋找,已經定位資料在原始碼中的位置,其中天氣資料和溫度資料在兩個p標籤中,而最高溫度資料在span標籤中,最低溫度在i標籤中。

但是這邊需要注意的乙個問題是,到了晚上時間,這裡會有乙個變化,那就是沒有了最高溫度,在網頁介面呈現的結果為:

在**中的呈現結果即為少了乙個span標籤,只剩下包含最低溫度資料的i標籤。由於我在資料的應用場景中必須有最高溫度,故為了避免讀取不到最高溫度,我採取的方法是直接利用第二天的最高溫度來代替(雖然比較粗暴)。

到此,網頁的分析工作就結束了,那麼接下來的工作就是獲取資料。

第二步 資料獲取

鑑於python語言的優雅,本次簡易爬蟲故選用python+beautiful soup 4進行頁面解析。beauti soup是乙個可以從html或xml檔案中提取資料的python庫,其強大的解析功能,能夠方便快捷的解決很多問題。關於beautisoup的相關介紹,大家可以參考官方文件或是其他檔案,這裡就直接貼出我的**.

from urllib.request import urlopen

from bs4 import beautifulsoup

import re

resp=urlopen('')

soup=beautifulsoup(resp,'html.parser')

tagtoday=soup.find('p',class_="tem") #第乙個包含class="tem"的p標籤即為存放今天天氣資料的標籤

try:

temperaturehigh=tagtoday.span.string #有時候這個最高溫度是不顯示的,此時利用第二天的最高溫度代替。

except attributeerror as e:

temperaturehigh=tagtoday.find_next('p',class_="tem").span.string #獲取第二天的最高溫度代替

temperaturelow=tagtoday.i.string #獲取最低溫度

weather=soup.find('p',class_="wea").string #獲取天氣

print('最低溫度:' + temperaturelow)

print('最高溫度:' + temperaturehigh)

print('天氣:' + weather)

程式執行結果如下:

Python爬取中國天氣網指定城市天氣

功能 完整 import pandas as pd import requests import re 建立乙個字典儲存中國天氣網城市 def createcitycode fh r text 中國天氣網城市 csv data pd.read csv fh,engine python data da...

Python 爬取中國天氣網天氣並通過郵箱定時傳送

獲取天氣資訊指令碼如下,usr bin python3 coding utf 8 import re import requests from bs4 import beautifulsoup import io import sys r requests.get timeout 30 r.rais...

Python爬取中國天氣網中的蘇州天氣

我選擇的 是中國天氣網中的蘇州天氣,準備抓取最近7天的天氣以及最高 最低氣溫 程式開頭我們新增 coding utf 8這樣就能告訴直譯器該py程式是utf 8編碼的,源程式中可以有中文。要引用的包 requests 用來抓取網頁的html源 csv 將資料寫入到csv檔案中 random 取隨機數...