#
# made by 杨庆华
import urllib.request,urllib.response
import json,csv,time
# 构建请求对象
def handle_request(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers);
return request;
#拿到的数据进行清洗操作,转化为目标类型和字段
def handle_data(response):
# jsonData 转化为str类型字符串
jsonData = response.read().decode();
# 转化为dict字典类型
jsonObj = json.loads(jsonData)
#不难发现通过对字典的访问,jsonObj['data']["asymptomaticProvince"]["confirm"],即可找到关于各个省份的列表
results = jsonObj['data']["asymptomaticProvince"]["confirm"];
#我们需要三个参数,对所获取的字段结果进行存储
#proName代表各省份名、proIncrease代表各个省份新增人口数量、proConfirm代表各省份确诊人数
proName = list()
proIncrease = list();
proConfirm = list();
length = len(results);
finalResult = []
for i in range(length):
proName.append(results[i]['province']);
proIncrease.append(results[i]['increase'])
proConfirm.append(results[i]['confirm'])
#('广东', 8, 155) 把各个省份对应的数据合并为一个元组,方便下面写入Excel表
t = (proName[i],proIncrease[i],proConfirm[i])
#把每一个数据追加到列表里。
finalResult.append(t)
# print(finalResult)
#为防止文件名重复导致报错,可以通过线程时间来解决命名冲突问题
localtime = time.thread_time()
filename = "中国疫情"+str(localtime)+".csv"
with open(filename,'w+',newline=" ") as file:
writer = csv.writer(file);
writer.writerow(finalResult)
def main():
#此数据接口来源是腾讯接口,通过爬虫即可进行爬取数据
url = "https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=asymptomaticProvince"
request = handle_request(url)
response = urllib.request.urlopen(request)
# 解码为字符串 response.read().decode()
handle_data(response)
if __name__ == "__main__":
main();
最终效果如下图所示: