利用Python請求API绍豁,并將json數(shù)據(jù)保存到MySql中

最近需要一些城市的環(huán)境污染指數(shù)做分析,在網(wǎng)上搜了一下牙捉,沒有完整的類型教程竹揍,在用百度和Google搜了幾天解決方案之后,終于把代碼寫完了邪铲,Python新手芬位,所以有些代碼會寫的比較啰嗦。

1. 導(dǎo)入所需庫文件

<code>
import urllib.parse
import urllib.request
from urllib.parseimportquote
import json
import pymysql
import datetime
import urllib
</code>

2. 連接API并測試該API是否可以連接带到,此處用的是阿里云的API

<code>
def getAndSaveJSON(sent):
host = 'http://jisuaqi.market.alicloudapi.com'
path = '/aqi/query'
method = 'GET'
text = quote(sent)
appcode = '你的APIKEY'
url = host + path + '?city=' + text + '&cityid=0'
request = urllib.request.Request(url)
request.add_header('Authorization', 'APPCODE ' + appcode)
rawData = urllib.request.urlopen(request)
jsonStr = rawData.read()
data = json.loads(jsonStr.decode('utf8'))
return data
def json_path(data,path,sep="."):
pp = path.split(sep)
tem = data
for p in pp:
if type(tem) is dict:
tem = tem[p]
elif type(tem) is list:
tem = tem[int(p)]
else:
tem = None
return tem
def getDetail(pollution,path,sep="."):
info = path.split(sep)
temp = pollution
for i in info:
if type(temp) is dict:
temp = temp[i]
elif type(temp) is list:
temp = temp[int(i)]
else:
temp = None
return temp
pollution = json_path(getAndSaveJSON("杭州"),"result")
print("以下數(shù)據(jù)為測試是否可以連接api")
print(pollution)
print("-"*150)
</code>

3.連接數(shù)據(jù)庫昧碉,填入數(shù)據(jù)庫的信息

<code>
db = pymysql.connect("hostname","database","password","username")
cursor = db.cursor()
r_id = None //主鍵賦值為空,在mysql中設(shè)置id自增
time_now = datetime.datetime.now()
//需要分析的城市存在列表中
cites = ['北京','天津','太原','石家莊','濟南',
'鄭州','南京','蘇州','上海','杭州',
'寧波','溫州','莆田','泉州','廈門',
'廣州','深圳','重慶','成都','紹興',
'呼和浩特','蘭州','貴陽','合肥','徐州',
'南通','常州','長沙','昆明','西安',
'汕頭','東莞','南寧','無錫','揚州',
'哈爾濱','長春','珠海','唐山','衡水',
]
</code>

4.以下是取出數(shù)據(jù)揽惹,并encode為utf8格式被饿,然后逐個存入數(shù)據(jù)庫中

<code>
for city in cites:
city_info = json_path(getAndSaveJSON(str(city)), "result")
cityId = getDetail(city_info, "cityid").encode('utf-8')
cityName = getDetail(city_info, "city").encode('utf-8')
so2 = getDetail(city_info, "so2").encode('utf-8')
so224 = getDetail(city_info, "so224").encode('utf-8')
no2 = getDetail(city_info, "no2").encode('utf-8')
no224 = getDetail(city_info, "no224").encode('utf-8')
co = getDetail(city_info, "co").encode('utf-8')
co24 = getDetail(city_info, "co24").encode('utf-8')
o3 = getDetail(city_info, "o3").encode('utf-8')
o324 = getDetail(city_info, "o324").encode('utf-8')
pm10 = getDetail(city_info, "pm10").encode('utf-8')
pm1024 = getDetail(city_info, "pm1024").encode('utf-8')
pm2_5 = getDetail(city_info, "pm2_5").encode('utf-8')
pm2_524 = getDetail(city_info, "pm2_524").encode('utf-8')
iso2 = getDetail(city_info, "iso2").encode('utf-8')
ino2 = getDetail(city_info, "ino2").encode('utf-8')
ipm10 = getDetail(city_info, "ipm10").encode('utf-8')
ipm2_5 = getDetail(city_info, "ipm2_5").encode('utf-8')
aqi = getDetail(city_info, "aqi").encode('utf-8')
primaryPollutant = getDetail(city_info, "primarypollutant").encode('utf-8')
quality = getDetail(city_info, "quality").encode('utf-8')
timePoint = getDetail(city_info, "timepoint").encode('utf-8')
level = getDetail(city_info, "aqiinfo.level").encode('utf-8')
color = getDetail(city_info, "aqiinfo.color").encode('utf-8')
affect = getDetail(city_info, "aqiinfo.affect").encode('utf-8')
measure = getDetail(city_info, "aqiinfo.measure").encode('utf-8')
print(cityName.decode('utf-8') + "污染數(shù)據(jù),Get搪搏!")
city_table_name = "city_aqi_" + cityId.decode('utf-8')
tem_table = "template_city"
try:
if cursor.execute("SHOW TABLES LIKE " + repr(city_table_name)):
cursor.execute("INSERT INTO "+ city_table_name + " VALUES(" "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", (r_id,cityId,cityName,so2,so224,no2,no224,co,co24,o3,o324,pm10,pm1024,pm2_5,pm2_524,iso2,ino2, ipm10,ipm2_5,aqi,primaryPollutant,quality,timePoint,level,color,affect,measure,time_now))
else:
cursor.execute("CREATE TABLE IF NOT EXISTS " + city_table_name + " LIKE " + tem_table)
print(city_table_name + " has been created")
//先將該城市的id存入city_info這個表中狭握,方便查詢
cursor.execute("INSERT INTO info_city VALUES("
"%s,%s,%s,%s)",
(r_id,cityName,cityId,time_now))
cursor.execute("INSERT INTO "+ city_table_name + " VALUES(" "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
(r_id,cityId,cityName, so2, so224, no2,
no224, co, co24, o3, o324,
pm10, pm1024, pm2_5, pm2_524,iso2,
ino2,ipm10, ipm2_5, aqi, primaryPollutant,
quality, timePoint, level, color, affect,
measure,time_now))
rows = cursor.fetchall()
db.commit()
except Exception as e:
print(e)
db.rollback()
cursor.close() //記住關(guān)閉連接
db.close()
</code>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疯溺,隨后出現(xiàn)的幾起案子论颅,更是在濱河造成了極大的恐慌,老刑警劉巖囱嫩,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恃疯,死亡現(xiàn)場離奇詭異,居然都是意外死亡墨闲,警方通過查閱死者的電腦和手機今妄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛙奖,你說我怎么就攤上這事潘酗。” “怎么了雁仲?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵仔夺,是天一觀的道長。 經(jīng)常有香客問我攒砖,道長缸兔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任吹艇,我火速辦了婚禮惰蜜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘受神。我一直安慰自己抛猖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布鼻听。 她就那樣靜靜地躺著财著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撑碴。 梳的紋絲不亂的頭發(fā)上撑教,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音醉拓,去河邊找鬼伟姐。 笑死,一個胖子當(dāng)著我的面吹牛亿卤,可吹牛的內(nèi)容都是我干的愤兵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼排吴,長吁一口氣:“原來是場噩夢啊……” “哼恐似!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起傍念,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矫夷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后憋槐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體双藕,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年阳仔,在試婚紗的時候發(fā)現(xiàn)自己被綠了忧陪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扣泊。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘶摊,靈堂內(nèi)的尸體忽然破棺而出延蟹,到底是詐尸還是另有隱情,我是刑警寧澤叶堆,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布阱飘,位于F島的核電站,受9級特大地震影響虱颗,放射性物質(zhì)發(fā)生泄漏沥匈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一忘渔、第九天 我趴在偏房一處隱蔽的房頂上張望高帖。 院中可真熱鬧,春花似錦畦粮、人聲如沸散址。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽预麸。三九已至,卻和暖如春拉背,著一層夾襖步出監(jiān)牢的瞬間师崎,已是汗流浹背默终。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工椅棺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齐蔽。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓两疚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親含滴。 傳聞我的和親對象是個殘疾皇子诱渤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容