实时抓取网页数据(数据获取接下来的事情就好办了,需要注意日期格式化问题)
优采云 发布时间: 2021-11-03 03:07实时抓取网页数据(数据获取接下来的事情就好办了,需要注意日期格式化问题)
实时流行病捕捉
武汉肺炎期间,家里无事可做。有一天,我突然想知道每天的疫情数据。
我以前玩过爬虫,但这次不一样了。准确地说,这次不是爬虫,因为它不具备“批量”的特性。
分析网站
首先要说明一点,我们没有政府数据库,数据来源是通过其他一些在线网站,实时更新数据,比如腾讯新闻、定香园等。
接下来,我们使用腾讯新闻来抓取疫情数据。
网址是#/
打开之后,可以看到它有实时的疫情追踪。
以前我用的爬虫是从html页面中获取相关内容,比较直接,因为所见即所得,只要到当前网页找到对应的标签就可以获取。
这一次,和以前不一样了。这类似于股票。数据从后端不断发送。这个动态更新的网站更适合选择直接查找数据流(不是我在html中找不到对应标签的借口)。
查找数据流量来源
打开开发者工具,我仔细搜索了一下。
我猜这种数据一定是json格式的。我首先在XHR中搜索,发现一堆带小数的数据。但让我们考虑一下。除了治愈率和死亡率,疫情数据的一般单位是人数。,怎么会有这么多小数?那不应该是这个数据。
我把除了js、image、css之外的所有数据都打开了,没有发现。CSS都是排版样式,图片都是图片。用这种方式传输数据是不可能的,所以去js。
功夫不负有心人,我在js中找到了一个jQuery,里面全是json数据!
数据采集
接下来的事情就简单了,我们也看到了也支持GET方法,访问这个url不需要其他数据。
import requests
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
ret = requests.get(url)
with open("data.json", "w") as f:
f.write(ret.text)
数据处理
Python 也非常擅长处理 json 对象。只需在此处编写 strToJson 方法即可。
import json
f = open('data0204.json', 'r', encoding='utf-8')
data = json.load(f)['data'] # load json data from txt file
data = json.loads(data) # load json data from str class
data = data['chinaDayAddList']
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime
plt.clf()
days = [datetime.strptime('2020.' + d['date'], '%Y.%m.%d').date() for d in data]
plt.plot(days, [int(con['confirm']) for con in data], label='confirm')
plt.plot(days, [int(con['suspect']) for con in data], label='suspect')
plt.plot(days, [int(con['dead']) for con in data], label='dead')
plt.plot(days, [int(con['heal']) for con in data], label='heal')
plt.legend()
plt.show()
需要注意日期格式问题!
除了像我上面这样的处理,你还可以使用其他部分来做任何你想做的事!