1. 程式人生 > >吳裕雄--天生自然python學習筆記:python通過“任務計劃程式”實現定時自動下載或更新執行 PM2.5 資料抓取程式資料

吳裕雄--天生自然python學習筆記:python通過“任務計劃程式”實現定時自動下載或更新執行 PM2.5 資料抓取程式資料

在 Windows 任務計劃程式中,設定每隔 30 分鐘自動抓取 PM2.5 資料,井儲存
在 SQLite 資料庫中 。

 

 

import sqlite3,ast,requests,os

from bs4 import BeautifulSoup

#cur_path=os.path.dirname(__file__) # 取得目前路徑
#print(cur_path)
cur_path = 'F:\\'
conn = sqlite3.connect(cur_path +'DataBasePM25.sqlite') # 建立資料庫連線
cursor = conn.cursor() # 建立 cursor 物件
# 建立一個數據表
sqlstr='''
CREATE TABLE IF NOT EXISTS TablePM25 ("no" INTEGER PRIMARY KEY AUTOINCREMENT 
NOT NULL UNIQUE ,"SiteName" TEXT NOT NULL ,"PM25" INTEGER)
'''
cursor.execute(sqlstr)
url = "http://api.help.bj.cn/apis/aqilist/"
# 讀取網頁原始碼
html=requests.get(url).text.encode('utf-8-sig')
print('資料已更新...')    
sp=BeautifulSoup(html,'html.parser')    #sp是bs4.Beautifulsoup類
# 將網頁內轉換為 list,list 中的元素是 dict 
jsondata = ast.literal_eval(sp.text)   #把sp.text字串轉為dict型別
js=jsondata.get("aqidata")  #從jasondata中取出值為"aqidata"的key對應的value的列表
# 刪除資料表內容
conn.execute("delete from TablePM25")
conn.commit()
#把抓到的資料逐條存到資料庫
n=1
for city in js:
    CityName=city["city"]
    if(city["pm2_5"]==""):
        PM25=0
    else:
        PM25=int(city["pm2_5"])
#     PM25=0 if city["pm2_5"] == "" else int(city["pm2_5"])     
    print("城市:{}   PM2.5={}".format(CityName,PM25))
    # 新增一條記錄
    sqlstr="insert into TablePM25 values({},'{}',{})" .format(n,CityName,PM25)
    cursor.execute(sqlstr)
    n+=1
    conn.commit() # 主動更新  
conn.close()  # 關閉資料庫連