目标网站如何抓取包含所有疫情信息的API数据爬取需要导入的包获得各个国家疫情信息获取各个省市疫情情况获取相应的地级市疫情情况数据保存结果展示完整代码
腾讯新闻提供的疫情实时追踪网站https://news.qq.com/zt2020/page/feiyan.htm
在这里插入图片描述
在这里插入图片描述
https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
import pandas as pd
import requests
import json
网站将所有信息以json的格式存在data这个变量中,先获取data变量的信息:
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
area = requests.get(url).json()
data = json.loads(area['data'])
获取最近一次的更新时间
update_time = data['lastUpdateTime']
all_counties = data['areaTree']
for country_data in all_counties:
print(country_data['name'])
中国
日本
新加坡
泰国
韩国
澳大利亚
美国
马来西亚
德国
越南
法国
加拿大
阿联酋
菲律宾
印度
意大利
英国
俄罗斯
尼泊尔
斯里兰卡
芬兰
瑞典
柬埔寨
比利时
西班牙
只分析国内疫情情况,可以写一个简单的if判断:
if country_data['name'] != '中国':
continue
else:
all_provinces = country_data['children'] # children包含了各个省的情况
两句逻辑连在一起
for country_data in all_counties:
if country_data['name'] != '中国':
continue
else:
all_provinces = country_data['children']
all_provinces[-1]
{'name': '西藏',
'children': [{'name': '地区待确认',
'total': {'confirm': 1, 'suspect': 0, 'dead': 0, 'heal': 0},
'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0}}],
'total': {'confirm': 1, 'suspect': 0, 'dead': 0, 'heal': 0},
'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0}}
获取地级市名称信息
for province_data in all_provinces:
province_name = province_data['name']
all_cities = province_data['children']
市区名称获取
all_cities[0]['name']
'地区待确认'
total是一个字典,里面包含了确诊,治愈,死亡的人数信息
all_cities[0]['total']
{'confirm': 1, 'suspect': 0, 'dead': 0, 'heal': 0}
利用for循环将所有信息存在一个空列表中
all_list = []
for province_data in all_provinces:
province_name = province_data['name']
all_cities = province_data['children']
for city_data in all_cities:
city_name = city_data['name']
city_total = city_data['total']
province_result = {'province': province_name, 'city': city_name,'update_time': update_time}
province_result.update(city_total)
all_list.append(province_result)
转换成dataframe数据结构
df = pd.DataFrame(all_list)
print(df.head())
city confirm dead heal province suspect update_time
0 武汉 10117 414 454 湖北 0 2020-02-06 15:04:04
1 孝感 1886 25 9 湖北 0 2020-02-06 15:04:04
2 黄冈 1807 29 60 湖北 0 2020-02-06 15:04:04
3 随州 834 9 9 湖北 0 2020-02-06 15:04:04
4 荆州 801 10 18 湖北 0 2020-02-06 15:04:04
保存为csv文件
df.to_csv('data.csv', index=False,encoding="utf_8_sig")
在这里插入图片描述
import pandas as pd
import requests
import json
def get_data():
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
area = requests.get(url).json()
data = json.loads(area['data'])
update_time = data['lastUpdateTime']
all_counties = cn_data['areaTree']
all_list = []
for country_data in all_counties:
if country_data['name'] != '中国':
continue
else:
all_provinces = country_data['children']
for province_data in all_provinces:
province_name = province_data['name']
all_cities = province_data['children']
for city_data in all_cities:
city_name = city_data['name']
city_total = city_data['total']
province_result = {'province': province_name, 'city': city_name,'update_time': update_time}
province_result.update(city_total)
all_list.append(province_result)
df = pd.DataFrame(all_list)
df.to_csv('data.csv', index=False,encoding="utf_8_sig")
if __name__ == '__main__':
get_data()