import os
import urllib
import urllib.request
import datetime
import base64
import json
home = "https://www.aqistudy.cn/api/getdata_citydetail.php"
def datetime_offset_by_month(datetime1, n=1):
one_day = datetime.timedelta(days=1)
q, r = divmod(datetime1.month + n, 12)
datetime2 = datetime.datetime(
datetime1.year + q, r + 1, 1) - one_day
if datetime1.month != (datetime1 + one_day).month:
return datetime2
if datetime1.day >= datetime2.day:
return datetime2
return datetime2.replace(day=datetime1.day)
def down_city(city, startTime, endTime, type):
c = base64.b64encode(city.encode("utf-8")).decode("utf-8")
st = base64.b64encode(startTime.encode("utf-8")).decode("utf-8")
et = base64.b64encode(endTime.encode("utf-8")).decode("utf-8")
t = base64.b64encode(type.encode("utf-8"))
t = base64.b64encode(t).decode("utf-8")
params = urllib.parse.urlencode({'city':c,'startTime':st,'endTime':et,'type':t});
request = urllib.request.Request(home,data=params.encode("utf-8"),method="POST")
response = urllib.request.urlopen(request)
page = response.read()
page = base64.b64decode(page)
page = base64.b64decode(page)
page = page.decode("utf-8")
page = page.replace(city, "")
print(page)
js = json.loads(page)
rs = js["rows"]
# 创建目录
if not os.path.exists(os.getcwd() + "/data/" + city):
os.makedirs(os.getcwd() + "/data/" + city)
# 文件存在则不下载
dt = datetime.datetime.strptime(startTime, "%Y-%m-%d %H:%M:%S")
dts = dt.strftime("%Y-%m")
file = os.getcwd() + "/data/" + city + "/hour_" + dts + ".txt"
print(file)
if os.path.exists(file):
os.remove(file)
s = ""
s += "time\t"
s += "aqi\t"
s += "pm2_5\t"
s += "pm10\t"
s += "co\t"
s += "no2\t"
s += "o3\t"
s += "so2\t"
s += "rank\n"
for r in rs:
s += str(r["time" ]) + "\t"
s += str(r["aqi" ]) + "\t"
s += str(r["pm2_5"]) + "\t"
s += str(r["pm10" ]) + "\t"
s += str(r["co" ]) + "\t"
s += str(r["no2" ]) + "\t"
s += str(r["o3" ]) + "\t"
s += str(r["so2" ]) + "\t"
s += str(r["rank" ]) + "\n"
f = open(file, "w")
f.write(s)
f.close()
if __name__ == "__main__":
city = "兰州"
startTime = "2016-01-01 00:00:00"
endTime = "2017-02-01 00:00:00"
type = "HOUR"
ds = datetime.datetime.strptime(startTime, "%Y-%m-%d %H:%M:%S")
de = datetime.datetime.strptime(endTime, "%Y-%m-%d %H:%M:%S")
dt = datetime_offset_by_month(ds, n=1)
dts = dt.strftime("%Y-%m-01 00:00:00")
dt = datetime.datetime.strptime(dts, "%Y-%m-%d %H:%M:%S")
while dt < de:
dss = ds.strftime("%Y-%m-%d %H:%M:%S")
dts = dt.strftime("%Y-%m-%d %H:%M:%S")
down_city(city, dss, dts, type)
ds = dt
dt = datetime_offset_by_month(dt, n=1)
dss = ds.strftime("%Y-%m-%d %H:%M:%S")
dts = de.strftime("%Y-%m-%d %H:%M:%S")
down_city(city, dss, dts, type)
print("finished!")
转载于:https://my.oschina.net/li0544/blog/823425