首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你调试代码并使用Echarts进行数据可视化

手把手教你调试代码并使用Echarts进行数据可视化

作者头像
刘早起
发布2020-04-22 16:56:59
2K0
发布2020-04-22 16:56:59
举报
文章被收录于专栏:早起Python早起Python

大家好,在昨天的文章中我们详细讲解了如何使用requests+bs4爬取美国疫情实时数据,但是在文章发布之后大约三个小时就有读者后台留言说怎么代码不能用了,在第一个读者反馈的时候我在想难道写的还不够详细吗,在第二个读者反馈的时候我在想这届读者水平不太行嘛,结果在不断有人反馈代码失效了之后我打开电脑测试一下,网站确实做了反爬措施

在找解决办法之前先思考了一下为什么会被反爬了,理论上我们的代码从头至尾只向网站发送了一次数据请求,如果没有人恶意发送高频率的请求,那么这种频率的请求完全是正常的,并且启用反爬也不会在短时间内完成,所以就当做是巧合吧,接下来说下我是怎样一步一步去解决这个问题。

在昨天的代码中,大多数人会在这一步发生异常?

就像图片里面一样,我们找不到这个标签了,所以我首先去页面F12按照昨天的办法查看是否数据还在这个标签中

可以看到,数据依旧还在这个标签中,所以再回去检查我们代码返回的原始值,我们打印出原始的返回值,并搜索全美确诊数据与纽约确诊数据

可以发现可以找到全美确诊数据,但是如果查找纽约确诊数据并找不到,说明网站返回给我们的数据中并没有再返回各个州的数据,这就解释了为什么大家取出的是一个空list。而这是为什么呢?我们回去F12看下

按照上图的指示,通过选择preview,我们可以看到全美的数据是有显示的,但是我们接着往下拉?

原来这个表格的数据被隐藏了,这也就解释了为什么我们搜索返回了一个空list,那咋办呢,不要慌。既然前端能展示说明数据肯定在某个数据包里面。我们接着在这里搜索纽约的数据53520

可以发现在这个JS包中含有我们需要的数据?,所以我们接着看下这个包的Requests URL?

接下来的操作就和昨天的方法一样了?

可以看到,请求这个URL之后返回的数据包含我们需要的各大洲数据,因此接下来的操作就是从这一堆数据中取出我们要的数据并整理呗,由于相关操作在昨天的文章中已经详细讲解了,这里我们直接给代码

url = 'https://coronavirus.1point3acres.com/_next/static/chunks/858271f81a54c4a12bd9f8d541482a95960c3031.f6d0ebde501d7c08cace.js'
headers = {'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
          "referer":"coronavirus.1point3acres.com"}
res = requests.get(url,headers=headers).text
data = re.findall(r"provinceShortName(.+?)curedCount",res)
df = pd.DataFrame(columns= ['Location','Confirmed'])
for i in range(len(data)):
    a = '{"s' + data[i]
    a = a[0:-2]
    a = a + "}"
    a = eval(a)
    Loaction = a['provinceName']
    Confirmed = a['confirmedCount']
    df.loc[i] = [Loaction,Confirmed]

稍微解释一下,前三句代码是向网站请求数据,没什么好说的。第四句话是利用正则表达式从返回的数据中提取数据我们要的数据,为什么不用美丽的汤?因为这次是js格式的数据和之前的不一样,看下data数据

可以看到,和昨天文章一样返回一个list,每个位置就是一个州的数据,之后的代码就是写一个循环将data中的数据依次存到dataframe中,这里我只取了确诊人数,当然还有很多其他数据,感兴趣的可以自己提取。

到这里,我们再一次使用Python从这个网站取到了我们需要的数据,以上的代码调试过程希望能帮助到大家学到一点什么。但是早起想说的是不论什么原因对方上线了反爬功能,说明对方的服务可能受到了爬虫的影响,所以我们在请求数据的时候请一定注意自己的请求频率,使用对方的数据前提是不给对方的服务造成负担,并且我们不能将数据用于研究之外的其他用途哦!

好了,由于篇幅原因,我们再简单说一下如何使用Echarts制作疫情地图

为什么使用Echarts?简单啊!一行代码都不用写就能生成好看的图!

首先我们打开Echarts官方示例网站?

https://www.echartsjs.com/examples/zh/index.html

按照上面的指示我们找到现成的美国地图,点进去

我相信就算是第一次进这个页面也能看懂个大概,左边写代码,右边展示,所以我们要做的就是将左边代码中的数据部分换成我们的数据不就就完事了。

很明显,框住的这一块就是这个地图的对应的数据,还记得我们爬出来的数据格式吗

州名和确诊数据都有,所以我们写一个简单的循环将数据打印出来?

是不是和页面中的数据长得一样了,接下来干嘛?复制粘贴进去!

就这样?,点击运行即可制作美国疫情击图,点击右下角下载就可以将图下载至本地,还支持交互哦~你问我右上角的文字、右下角的上下限怎么修改:所有图中的相关信息全部在左边的代码中,查找、定位、修改搞定。

当然Echarts一般不是这么用的,在写网站时会涉及前后端数据交互或使用Echarts动态刷新数据等操作可能会比较难,但是对于我们来说就写个数据分析报告,傻瓜式替换数据生成好看的图不香吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档