python抓取网页数据(抓取百度疫情数据的代码已经无法运行,怎么办? )

优采云 发布时间: 2022-02-21 12:07

  python抓取网页数据(抓取百度疫情数据的代码已经无法运行,怎么办?

)

  有朋友反映,抓取百度疫情数据的代码已经失效。没看过的可以点击下方链接查看。

  看了之后,因为百度调整了一些页面信息,调整后代码就可以使用了,那如果下次调整呢?你说这个可能性很大吗?

  我觉得还是挺大的,有什么办法可以稳定吗?

  问这个问题,肯定是有的,就是换一种方式获取疫情的实时数据。

  这一次,我们来抓取网易 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')

  然后地图绘制结果就出来了。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线