python抓取网页数据(抓取百度疫情数据的代码已经无法运行,怎么办? )
优采云 发布时间: 2022-02-21 12:07python抓取网页数据(抓取百度疫情数据的代码已经无法运行,怎么办?
)
有朋友反映,抓取百度疫情数据的代码已经失效。没看过的可以点击下方链接查看。
看了之后,因为百度调整了一些页面信息,调整后代码就可以使用了,那如果下次调整呢?你说这个可能性很大吗?
我觉得还是挺大的,有什么办法可以稳定吗?
问这个问题,肯定是有的,就是换一种方式获取疫情的实时数据。
这一次,我们来抓取网易 JSON 疫情数据。
链接是这个
打开 URL 并看到这个。如果您是第一次接触 JSON 数据,您会感到困惑。不过没关系,如果你使用的是火狐浏览器,也可以在上面找到JSON、美化输出等功能。
这就是美化输出的效果。是不是看起来好多了,但是还是一头雾水,对吧,因为你从来没有接触过JSON数据。
这是一点JSON效果,不同的颜色,看起来更舒服。
好的,让我们从数据捕获和导入开始。首先导入所需的模块。
import json
import requests
from pandas.io.json import json_normalize
然后开始抓取数据
url="https://c.m.163.com/ug/api/wuhan/app/data/list-total"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}
ret=requests.get(url, headers=headers)
result=json.loads(ret.content)
查看抓取的数据结果,可以看到它是一个字典,而我们要的数据在key=data中。
继续双击打开数据,我们要的数据在areaTree中。
继续双击打开areaTree,这是areaTree的列表,我们要的第一行数据。
继续双击打开areaTree的第一行,这次又变成字典了,你看到中国了吗?哈哈,我们要的数据在key=children中。
继续双击打开children,这是我们要的数据,这又变成了一个list,每一行都是一个省的数据
我们点第一行,看是不是,湖北已经出现了。
继续点击儿童,就是湖北各城市的数据。如果你不点击它,我们只需要省级数据。我们怎么能想出它?继续数据处理以提取我们想要的数据。
t= result['data']['areaTree'][0]['children']
sf=json_normalize(t)
两行代码就出来了,哈哈!让我们看一下数据。
那么我们要的字段是name,total.confirm,name是省份名称,total.confirm是累计确诊数,如果换成taday.confirm就是新增确诊数。直接将name和total.confirm替换为之前绘制地图的代码对应位置即可。
# 将数据转换为二元的列表
list1 = list(zip(sf['name'],sf['total.confirm']))
# 创建一个地图对象
map_1 = Map()
#对全局进行设置
map_1.set_global_opts(
#设置标题
title_opts=opts.TitleOpts(title="全国疫情地图"),
#设置最大数据范围
visualmap_opts=opts.VisualMapOpts(max_=2500,range_color=["#FFFFFF","#FFCC00","#CC0000"]))
# 使用add方法添加地图数据与地图类型
map_1.add("累计确诊人数", list1, maptype="china")
# 地图创建完成后,通过render()方法可以将地图渲染为html
map_1.render('全国疫情地图.html')
然后地图绘制结果就出来了。