【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化

2020年1月23日,睡醒一觉,发现新型肺炎的影响正在以肉眼可见的速度扩散,已经放假的我只能宅在家里,不敢随便外出。实在闲得无聊,我便拿起了技术人的工具,利用python,用数据来简单分析一波新型肺炎的影响程度,同时,大人们对这次事件好像毫无畏惧,多次提醒出门要小心留意,结果大人们也只是敷衍回答:没事。所以,咱们用数据来说话,通过最近网上的热搜数据让家长们重视起来。

 

获取热搜数据

那需要的微博热搜历史数据在哪找?借助【热搜神器】网站,可以查找微博热搜历史记录。

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第1张图片

如上图,打开【热搜神器】网站,F12进入Network查看Request URL,通过点击可以发现URL中只有timeid是变化的,所以就找到了所需要的URL,即url = 'https://www.eecso.com/test/weibo/apis/currentitems.php?timeid=' + str(time_id),而最新的timeid可以通过另一地址获取:https://www.eecso.com/test/weibo/apis/getlatest.php。在这里我使用了2020-01-01到2020-01-23 0点和12点两个时间点的time_id,遍历这个区间,通过requests即可获取2020年1月1日到最新日期的热搜数据。

 

处理数据

请求返回的数据是json格式的数据,通过json解析处理后保存到列表中,同时我也另存到csv格式文件中备份了数据。部分代码如下所示。

def requests_web_data(url):
    try:
        headers = {"User-Agent": "", "Cookie": ""}
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
    except:
        print('requests error!')
    else:
        return r.content

def get_weibo_historical_data():
    latest_time_id_url = 'https://www.eecso.com/test/weibo/apis/getlatest.php'
    latest_time_id = json.loads(requests_web_data(latest_time_id_url).decode('utf-8'))[0]  
    # 筛选获取time_id
    time_ids = []
    for x in range(48438, int(latest_time_id) + 1, 180):    # time_id=48438:2020-01-01
        time_id_url = 'https://www.eecso.com/test/weibo/apis/getlatest.php?timeid=' + str(x)
        time_data = json.loads(requests_web_data(time_id_url).decode('utf-8'))
        if time_data is not None:
            time = time_data[1].split(' ')[1].split(':')[0]
            if time == '00' or time == '12':
                time_ids.append(time_data[0])
    if time_ids[-1] != latest_time_id:
        time_ids.append(latest_time_id)
    #通过筛选的time_id获取一月份的热搜数据
    weibo_hot_data = []
    for time_id in time_ids:
        historical_data_url = 'https://www.eecso.com/test/weibo/apis/currentitems.php?timeid=' + str(time_id)
        data = json.loads(requests_web_data(historical_data_url).decode('utf-8'))
        weibo_hot_data.append(data)
    return weibo_hot_data

 

数据分析

通过以上操作已经获取到了需要的热搜数据,接下来就是通过pyecharts进行数据分析。写这篇文章时,获取到的数据时间段为2020年1月1日到2020年1月23日。

1、1月份TOP20热搜数据

1月份热搜数量最大的前20个数据,几乎一半是关于新型肺炎的。其他事件也有些是由肺炎引发的,如最新的春节档电影全部撤档也是因为在一个封闭的空间看电影存在着一定风险导致取消了春节电影档,但我是大力支持撤档的,毕竟关键时期对自己负责也就是对他人负责。

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第2张图片

2、1月份武汉新型肺炎相关热搜的爬升程度

从图可以明显看到,1月初已经有肺炎相关的热搜信息,但这期间关于肺炎的信息时有时无,说明大家对肺炎的事情是还没有放在心上的,直到18号左右,有关肺炎的热搜信息就开始出现井喷,我记得那时候是因为ZF公布了病例的相关情况(出现死亡了),这也基本符合各大媒体对其的报道数量趋势,说明18号开始人们对该事件重视起来了,这也导致后面的口罩出现售空,限购。

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第3张图片

3、武汉新型肺炎相关的热搜事件

大家都搜索新型肺炎以下几方面的信息,基本上是围绕着武汉、肺炎、预防和口罩等关键字。

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第4张图片

4、词云显示武汉新型肺炎相关的热搜事件

最后通过词云,我们可以更加明显的看到大家关注的信息点。

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第5张图片

5、结语

各种如何预防病毒,病毒信息等网上,电视上都很多了,我这里就不附图了,最后:

【Python】我用python爬取一月份微博热搜数据来分析人们对新型肺炎的关注程度变化_第6张图片

 

附丁香医生的全国新型肺炎疫情实时动态网址:https://3g.dxy.cn/newh5/view/pneumonia?from=timeline&isappinstalled=0

 

 

如有问题,可联系我

你可能感兴趣的:(Python,Python爬虫)