从地铁客流量来看上海阳性感染者情况

从地铁客流量来看上海阳性感染者情况

最近上班的时候,有一个明显的感觉,那就是:公交车上的人越来越少了,路上的车越来越少了,平常一个小时的行程,现在四十分钟就可以了。上班人员的减少,从侧面反映出阳性感染者不断增加,居家办公的人数越来越多。但,这是否预示着上海的这波疫情已经达到顶峰,或者还在继续扩大。因此,我们通过观察上海地铁客流量的变化,来观察上海这波疫情情况。

一、数据来源

通过百度搜索知道,上海地铁微博每天会发布上海地铁的客流情况,因此打算从上海地铁微博爬取每日的客流量数据。

上海地铁微博截图

二、数据获取

2.1、用到的python库

  • 运用requests访问上海地铁微博网页,获取原始数据;

  • 运用re库解析原始数据,获取地铁客流量数据。

2.2、思路解析

2.2.1、找到目标URL

1)登录自己的微博,并切换到“上海地铁shmetro”微博首页;

2)在页面空白处单击右键,并选择【检查】,调出开发者工具界面;

3)在弹出的开发者工具界面,选择【网络】选项卡,然后重新刷新页面;

4)在开发者工具界面点击放大镜进行搜索;在搜索框中输入“地铁网络客流”;

5)选中搜索结果,然后点击标头,便可以找到目标URL地址。

步骤详解

2.2.2、访问目标
import requests
import re
import pandas as pd

def get_content(page,since_id):
    since_id=since_id#当访问第二页数据时,需要该参数
    page = page
    if since_id is None:
        url=str('https://weibo.com/ajax/statuses/mymblog?uid=1742987497&page='+str(page)+'&feature=0')
    else:
        url=str('https://weibo.com/ajax/statuses/mymblog?uid=1742987497&page='+str(page)+'&feature=0&since_id='+str(since_id))
    headers = {
        "authority":"weibo.com",
        "method":"GET",
        "path":"/ajax/statuses/mymblog?uid=1742987497&page=1&feature=0",
        "scheme": "https",
        "accept": "application/json, text/plain, */*",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "client-version": "v2.37.21",
        "cookie": "需要替换成自己的cookie",
        "referer": "https://weibo.com/u/1742987497",
        "sec-ch-ua": "'Microsoft Edge';v='107', 'Chromium';v='107', 'Not=A?Brand';v='24'",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "Windows",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "server-version": "v2022.12.30.4",
        "traceparent": "00-68055a6f6dd06c7642e847a62527f526-fa55575be1511b1b-00",
        "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35",
        "x-requested-with": "XMLHttpRequest",
        "x-xsrf-token": "hvhCFVwWluphipcsxJqBPYsK"
    }#请求头,就是把目标URL下面的请求头都复制过来就可以了。
    response = requests.get(url, headers=headers)
    mycontent = response.json()#返回的数据是json格式的数据
    return mycontent
2.2.3、解析目标
def parse_content(mycontent):
    mycontent=mycontent
    temp = mycontent["data"]["list"]
    group_count = len(temp)
    population = []
    daytime = []
    createtime = []
    orgtext = []
    for i in range(group_count):
        search_result = re.search("地铁网络客流",temp[i]["text"],re.S)#得到发布客流量的那个微博消息
        if search_result is not None:
            population_temp = float(re.search("([0-9.]+)万",temp[i]["text"],re.S).group(1))
            daytime_temp = re.search("[0-9]+月[0-9]+日",temp[i]["text"],re.S).group()
            createtime_temp = temp[i]["created_at"]
            orgtemp = temp[i]["text"]
            population.append(population_temp)
            daytime.append(daytime_temp)
            createtime.append(createtime_temp)
            orgtext.append(orgtemp)
    return population,daytime,createtime,orgtext
2.2.4、获取数据
population = []
daytime = []
createtime = []
orgtext = []
for m in range(1,40):
    if m == 1:
        mycontent = get_content(page=m,since_id=None)
        since_id = mycontent["data"]["since_id"]
    else:
        since_id = mycontent["data"]["since_id"]
        mycontent = get_content(page=m,since_id=since_id)
        
    population_temp,daytime_temp,createtime_temp,orgtemp=parse_content(mycontent)
    population.extend(population_temp)
    daytime.extend(daytime_temp)
    createtime.extend(createtime_temp)
    orgtext.extend(orgtemp)

passengerdf = pd.DataFrame()
passengerdf["createtime"] = createtime
passengerdf["population"] = population
passengerdf["daytime"] = daytime
passengerdf["orgtext"] = orgtext
2.2.5、获取的目标数据截图

提取结果截图

三、客流量趋势图

从客流量趋势来看,新十条发布后,上海地铁客流量连续两周下降,由1000多万水平下降至300多万水平。在12月26日达到低谷之后,从12月27日开始,客流量开始有逐渐回升的趋势。

因此根据上述客流量可以预估,上海第一波感染的高峰在12月26日。此后,第一波感染者开始陆续返岗,并且返岗人数大于阳性居家人数。

本文写的并不详细,如有疑惑的地方可查看我的往期文章(网络爬虫学习笔记目录)学习一下基础的网络爬虫知识。

—End—

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值