我選擇的**是中國天氣網中的蘇州天氣,準備抓取最近7天的天氣以及最高/最低氣溫
程式開頭我們新增:
# coding : utf-8
這樣就能告訴直譯器該py程式是utf-8編碼的,源程式中可以有中文。
要引用的包:
requests:用來抓取網頁的html源**
csv:將資料寫入到csv檔案中
random:取隨機數
time:時間相關操作
socket和http.client 在這裡只用於異常處理
beautifulsoup:用來代替正則式取原始碼中相應標籤中的內容
urllib.request:另一種抓取網頁的html源**的方法,但是沒requests方便(我一開始用的是這一種)
獲取網頁中的html**:
header是requests.get的乙個引數,目的是模擬瀏覽器訪問
header 可以使用chrome的開發者工具獲得,具體方法如下:
開啟chrome,按f12,選擇network
重新訪問該**,找到第乙個網路請求,檢視它的header
timeout是設定的乙個超時時間,取隨機數是因為防止被**認定為網路爬蟲。
然後通過requests.get方法獲取網頁的源**、
rep.encoding = 『utf-8』是將源**的編碼格式改為utf-8(不該源**中中文部分會為亂碼)
下面是一些異常處理
返回 rep.text
獲取html中我們所需要的字段:
這裡我們主要要用到beautifulsoup
beautifulsoup 文件
首先還是用開發者工具檢視網頁原始碼,並找到所需字段的相應位置
找到我們需要欄位都在 id = 「7d」的「div」的ul中。日期在每個li中h1 中,天氣狀況在每個li的第乙個p標籤內,最高溫度和最低溫度在每個li的span和i標籤中。
感謝joey_ko指出的錯誤:到了傍晚,當天氣溫會沒有最高溫度,所以要多加乙個判斷。
**如下:
def get_data(html_text):
final =
bs = beautifulsoup(html_text, "html.parser") # 建立beautifulsoup物件
body = bs.body # 獲取body部分
data = body.find('div', ) # 找到id為7d的div
ul = data.find('ul') # 獲取ul部分
li = ul.find_all('li') # 獲取所有的li
for day in li: # 對每個li標籤中的內容進行遍歷
temp =
date = day.find('h1').string # 找到日期
inf = day.find_all('p') # 找到li中的所有p標籤
if inf[1].find('span') is none:
temperature_highest = none # 天氣預報可能沒有當天的最高氣溫(到了傍晚,就是這樣),需要加個判斷語句,來輸出最低氣溫
else:
temperature_highest = inf[1].find('span').string # 找到最高溫
temperature_highest = temperature_highest.replace('℃', '') # 到了晚上**會變,最高溫度後面也有個℃
temperature_lowest = inf[1].find('i').string # 找到最低溫
temperature_lowest = temperature_lowest.replace('℃', '') # 最低溫度後面有個℃,去掉這個符號
return final
寫入檔案csv:將資料抓取出來後我們要將他們寫入檔案,具體**如下:
def write_data(data, name):
file_name = name
with open(file_name, 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(data)
主函式:
if __name__ == '__main__':
url =''
html = get_content(url)
result = get_data(html)
write_data(result, 'weather.csv')
然後執行一下:
生成的weather.csv檔案如下:
總結一下,從網頁上抓取內容大致分3步:
1、模擬瀏覽器訪問,獲取html源**
2、通過正則匹配,獲取指定標籤中的內容
3、將獲取到的內容寫到檔案中
剛學python爬蟲,可能有些理解有錯誤的地方,請大家批評指正,謝謝!
Python爬取中國天氣網天氣資料
由於一些需要,想要獲取今天的天氣資料,於是又撿起了python寫了個爬蟲用來獲取中國天氣網上的氣象資料。由於我需要的資料比較簡單,因為我只需要北京地區當天的溫度 最低溫度和最高溫度 和天氣,因此 部分比較簡單,下面就來講講這個爬取的過程。第一步 網頁分析 要進行爬蟲設計,首先得分析網頁的請求過程。首...
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...