Advertisement

Pythton3爬虫实战——肺炎疫情数据

阅读量:

爬虫思路

第一步 获取我们所需要的数据

各平台均提供本次疫情的实时数据信息。经过对各平台收集到的数据进行分析后发现, 丁香医生返回的数据呈现静态特性, 这一特点使得从腾讯及网易获取数据的过程较为繁琐, 因此决定采用相对简单的方案, 即采用一种更为简便的方式进行抓取操作, 并采用了requests库配合BeautifulSoup来进行数据抓取

复制代码
    def get_one_page(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
        response = requests.get(url,headers=headers)
        response.encoding = 'utf-8' #此处要指定utf-8编码格式否则乱码
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, "html.parser")
            return soup
        return None
    except RequestException:
        return None
第二步 数据的处理

在获取到包含所需数据的网页HTML代码之后进行了后续分析,并进一步提取所需数据(包括城市信息、确诊病例数、死亡病例数及治愈病例数等)。

复制代码
    def main():
    url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia'
    soup = get_one_page(url)
    #使用正则匹配 并搜索script标签中id为getAreaStat的内容
    information = re.search(r'\[(.*)\]', str(soup.find('script', attrs={'id': 'getAreaStat'}))) 
    information = json.loads(information.group(0))#转成list
    data = [] #用于数据可视化 画地图
    lists = [] #导出csv统计所有数据
    #获取到的具体数据格式大致如下所示
    #{'cityName': '武汉', 'currentConfirmedCount': 30042, 'confirmedCount': 32994, 'suspectedCount': 0, 'curedCount': 1916, 'deadCount': 1036, 'locationId': 420100}
    for area in information:
        data.append([area['provinceShortName'], area['confirmedCount']])
        for city in area['cities']:
            lists.append([city['cityName'],city['currentConfirmedCount'],city['confirmedCount'],city['suspectedCount'],city['curedCount'],city['deadCount']])
    save_data_as_csv('covid_Excel', lists)
    print(data)
    echarts(data)
第三步 数据的持久化

在获取完数据后 需要对这些信息进行存储处理。这里决定采用CSV文件格式来进行数据持久化操作。为了方便管理 能够实现每天定时同步到微信公众号的信息备份 值得一提的是 这样就不需要每天去打开浏览器查找资料了 实际上我已经默认了这个设定。

复制代码
    def save_data_as_csv(filename, data):
        filename = filename.replace(":", " ")  # 调整时间
        with open(filename + ".csv", "w", newline="",encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerow(["地区", "当前确诊人数","历史确诊人数","疑似病例","治愈人数","死亡人数"])
            for i in data:
                writer.writerow(i)
            f.close()

效果如图所示

在这里插入图片描述
第四步 数据可视化

通过获得了这些有用的数据后,通过Excel的方式进行浏览显得不够直观。我们可以将其进行可视化处理。这里采用的是非常强大的PyEcharts库。在Python环境中,我们通常会采用PyEcharts库,在使用这个工具的过程中大家需要注意的是,在Python3及以上版本中它只支持V1.0以上版本的功能。这些功能可能与旧版存在差异。详细请参考这里 https://pyecharts.org/#/zh-cn/geography_charts

复制代码
    def echarts(data):
    map = Map().add("确诊人数", data,"china").set_series_opts(label_opts=opts.LabelOpts(is_show=True)).set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="COVID-2019疫情现状"),)
    # type="effectScatter", is_random=True, effect_scale=5  使点具有发散性
    map.render(path="肺炎.html")

具体效果图

在这里插入图片描述

具体代码请移步https://github.com/yuchen8888/covid_spider

全部评论 (0)

还没有任何评论哟~