因為近期有需要去中國網站抓空品資料分析的需求,他是一個城市一個城市個別放的https://www.aqistudy.cn/historydata/
備註 AQI 是計算空氣品質指標的方式,詳細請看我國環保署的網站。
為了比較方便處理,因此通通抓到資料庫再用Query或丟到Excel處理。處理方式是利用python去爬爬爬,放到MS SQL,再用SQL的方式進行分析比對,任務很簡單,但處理起來需要一些技巧。
1. 抓資料
#import需要的工具
import pandas as pd
import sqlite3
import urllib.parse
import sqlalchemy, pyodbc
from datetime import datetime
from selenium import webdriver
#取得所有城市,程式清單請自己整理成TXT
def get_city_set():
str_file = r'city.txt'
fp = open(str_file,'rb')
city_set = list()
for line in fp.readlines():
city_set.append(str(line.strip(),encoding='utf-8'))
return city_set
city_set = get_city_set()
#開始爬資料
base_url = 'https://www.aqistudy.cn/historydata/monthdata.php?city='
#SQLServer的帳密,請自己改
engine = sqlalchemy.create_engine("mssql+pyodbc://[帳號]:[密碼]@[主機]:1433/[資料庫名]?driver=SQL+Server+Native+Client+11.0")
conn = engine.connect()
for city in city_set:
weburl = ('%s%s' % (base_url,urllib.parse.quote(city.encode('utf-8'))) )
print(weburl)
driver = webdriver.PhantomJS()
driver.get(weburl)
dfs = pd.read_html(driver.page_source,header=0)[0]
driver.quit()
dfs['City']=city
dfs['InsertDatetime']=datetime.now()
print(city,"\t",len(dfs))
dfs.to_sql("[表格名]",engine,if_exists='append')
conn.close()
#判斷結果
engine = sqlalchemy.create_engine("mssql+pyodbc://[帳號]:[密碼]@[主機]:1433/[資料庫名]?driver=SQL+Server+Native+Client+11.0")
conn = engine.connect()
rs = conn.execute('SELECT [City],count(*) FROM tbAQI with (nolock) group by [City]')
for row in rs:
print(row)
conn.close()
2. 分析
用Pivot就可以方便資料分析人員在Excel做逐時的比對
select * from ( select city,'PM25' as [Object],[月份],[pm2.5] from [表格名] group by city,[月份],[pm2.5] )as S PIVOT ( sum([pm2.5]) for mon in ([2014-01],[2014-02],[2014-03],[2014-04],[2014-05],[2014-06],[2014-07],[2014-08],[2014-09],[2014-10],[2014-11],[2014-12], [2015-01],[2015-02],[2015-03],[2015-04],[2015-05],[2015-06],[2015-07],[2015-08],[2015-09],[2015-10],[2015-11],[2015-12], [2016-01],[2016-02],[2016-03],[2016-04],[2016-05],[2016-06],[2016-07],[2016-08],[2016-09],[2016-10],[2016-11],[2016-12], [2017-01],[2017-02],[2017-03],[2017-04],[2017-05],[2017-06],[2017-07],[2017-08],[2017-09],[2017-10]) )AS P
貼到Excel就長這樣,可以多城市一起比對分析,方便!
#Python
#Crawler
#AQI
#AQIStudy
#Sky is limit
沒有留言:
張貼留言