使用Python获取上海详细疫情数据(一)「建议收藏」

使用Python获取上海详细疫情数据(一)「建议收藏」抽空之余,写个小脚本,获取下上海详细的疫情数据,以作后续的详实数据分析(纯爱好),或者仅仅作为对历史的一种数据样本式的保存也未尝不可,顺便吧,缓解或者平复下情绪。阅读本文章需要读者有一定的Python基础,且对XPATH、正则、selenium有一定.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

抽空之余,写个小脚本,获取下上海详细的疫情数据,以作后续的详实数据分析(纯爱好),或者仅仅作为对历史的一种数据样本式的保存也未尝不可,顺便吧,缓解或者平复下情绪。

阅读本文章需要读者有一定的Python基础,且对XPATH、正则、selenium有一定程度的了解(知道基础知识和基础语法即可),并且对Python数据持久化手段有一定的了解(本文内使用的是shelve,因为方便)。

本文是通过爬虫手段,对上海卫健委官网发布的每日详实数据进行分析并解析出来,包括全市每日新增确诊、新增无症状感染者,各区每日新增确认、新增无症状感染者、新增人员居住小区名称,可以认为把每日发布的核心数据都解析了下来。

先声明下,此行为非商业行为,非盈利目的。

在解析的过程中,因为3月份和4月份部分时间段,上海发布的数据格式,包括每个区发布的文案格式,都特么有一定程度的不统一,造成解析工作比较蛋疼。但从4月5日之后,整体格式算是稳定了下来,所以本文在解析的时候,也根据不同的时间段的文章单独写了解析方法。

最后,经实测,脚本表现稳定、完美。

现在贴出来,另一方面,也算是 和Python爱好者一起交流学习。

为了使得脚本整体可读、可维护,共分了3个模块,分别是settings、main、tools,其中settings主要管理配置信息(核心是发布数据的文章地址),main是主程序,tools是各类解析方法(函数)。

好了,不扯淡了,开始贴代码。

一、settings配置文件

先贴比较容易的,配置文件,整体代码如下

import pathlib

#存储数据的shelve数据库位置
dbname='shyqdatas'

path=pathlib.Path(__file__).parent.joinpath(dbname)
db_path=str(path)



#4月5日之前发布数据的文章链接,提取数据方式有一定差异
urls_before=[
    # 'https://wsjkw.sh.gov.cn/xwfb/20220320/f9f1683cf055471fb1a67b8586e36660.html',#3月19日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220321/2cda1b24b5304d118352bdfd32af0aa4.html',#3月20日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220322/b5bf11c3ef924f2e9d292ad14b0f3403.html',#3月21日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220323/dd54a58cdf524a51af5ba113adc6730f.html',#3月22日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220324/a8643ae53c7644f597cd88b8f2f4d8c4.html',#3月23日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220325/a76fbb6a18f542cda80fa9a9a4b08dd3.html',#3月24日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220326/ff80e7e71f00478abf80a7d057e1683b.html',#3月25日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220327/09cfe78deb4041098d0042010fabdfeb.html',#3月26日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220328/12b074e3958e448ab6bfb52e739d1d1e.html',#3月27日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220329/b7430a2b3e04483c9d7ac6e4f4d4cf68.html',#3月28日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220330/8d4f5179f1ef43da91c2d63cd906bfeb.html',#3月29日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220331/e86a298aecdf4e94b1796089e943054b.html',#3月30日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220402/e4dfcc8e58b14b3e8dab46d60ff6d767.html',#4月1日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220403/c389b92483534c089fccd3f172c68595.html',#4月2日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220404/ff41c17c2bec4154b800f22040d3754a.html',#4月3日
    # 'https://wsjkw.sh.gov.cn/xwfb/20220405/4c6aec72ef47453ba2a5643fad214b2a.html',#4月4日    
]

#4月5日之后的数据链接,注释掉的是已经抓取过的
urls_after=[
    # 'https://wsjkw.sh.gov.cn/xwfb/20220401/8c101d231d5644df8ed92d6bdbfab236.html',#3月31日
    # 'https://mp.weixin.qq.com/s/djwW3S9FUYBE2L5Hj94a3A',#4月5日数据
    # 'https://mp.weixin.qq.com/s/8bljTUplPh1q4MXb6wd_gg',#4月6日数据
    # 'https://mp.weixin.qq.com/s/HTM47mUp0GF-tWXkPeZJlg',#4月7日数据
    # 'https://mp.weixin.qq.com/s/79NsKhMHbg09Y0xaybTXjA',#4月8日数据        
    # 'https://mp.weixin.qq.com/s/_Je5_5_HqBcs5chvH5SFfA',#4月9日数据
    # 'https://mp.weixin.qq.com/s/u0XfHF8dgfEp8vGjRtcwXA',#4月10日数据
    # 'https://mp.weixin.qq.com/s/vxFiV2HeSvByINUlTmFKZA',#4月11日数据
    # 'https://mp.weixin.qq.com/s/OZGM-pNkefZqWr0IFRJj1g',#4月12日数据
    # 'https://mp.weixin.qq.com/s/L9AffT-SoEBV4puBa_mRqg',#4月13日数据
    # 'https://mp.weixin.qq.com/s/5T76lht3s6g_KTiIx3XAYw',#4月14日数据
    # 'https://mp.weixin.qq.com/s/ZkhimhWpa92I2EWn3hmd8w',#4月15日数据
    # 'https://mp.weixin.qq.com/s/dRa-PExJr1qkRis88eGCnQ',#4月16日数据
    #'https://mp.weixin.qq.com/s/LguiUZj-zxy4xy19WO0_UA',#4月17日数据
    #'https://mp.weixin.qq.com/s/GWI6LxYLHOvv1dioN5olxg',#4月18日数据
    #'https://mp.weixin.qq.com/s/puNUP9bjYlZNELsse09Z0w',#4月19日数据
    #'https://mp.weixin.qq.com/s/8qCvsE578Ehz6UcWYRBfXw',#4月20日数据
    #'https://mp.weixin.qq.com/s/qFvUyEB-R-GKP7vgKR-c3A',#4月21日数据 
]

 该配置文件主要管理待爬取的文章地址(因为上面所述,上海发布的数据在不同时段格式有一定差异,所以分了两组文章地址),以及进行数据存储的shelve数据库地址(可以直接使用,因为地址没有写死,是动态的根据配置文件地址生成)

二、main文件

以下为main文件,是此次脚本的主程序,主要是使用配置文件内信息,然后调用tools内的工具解析数据,并存储到shelve数据库内。

from lxml import etree
import requests,shelve
import settings
from tools import * 
import time
from selenium import webdriver

def parse_html(driver,url):
    driver.get(url)
    time.sleep(5)
    html=etree.HTML(driver.page_source)    
    return html

if __name__=='__main__':  
    
    urls_before=settings.urls_before #4月5日之前发布数据的文章链接
    urls_after=settings.urls_after #4月5日之后发布数据的文章链接
    db_path=settings.db_path

    
    driver=webdriver.Firefox()
    
    for url in urls_before:
        #提取页面内的当日疫情数据
        html=parse_html(driver,url)
        datas=fetch_region_data_before(html)
        
        #将数据存储到shelve内
        with shelve.open(db_path) as db:
            db[datas['current_date']]=datas 

  
    for url in urls_after:
        #提取页面内的当日疫情数据
        html=parse_html(driver,url)       
        datas=fetch_region_data_after(html)
        
        #将数据存储到shelve内
        with shelve.open(db_path) as db:
            db[datas['current_date']]=datas 

    driver.quit()

 以上代码,主要做以下几件事儿

  1. 将配置文件内的配置项导入并引用
  2. 创建一个浏览器,并通过浏览器打开文章链接,获取源代码并使用etree解析,便于后续使用xpath提取数据
  3. 然后开始对两组文章链接进行循环提取,然后存储到shelve内,注意我这里是使用当日日期作为主键(因为后续通过数据库读取数据基本也是按照日期来)
  4. 其他的基本在代码内做了备注,如果有知识盲点,可以边学边补课。

因为toole文件是此次爬取的核心,并且包含的逻辑比较多,所以笔者分成了另外一个文章,在那个文章做详细的展示和说明。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193478.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

    自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d””o””t””a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。那么问题来了。。山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。其实这…

    2022年10月28日
    0
  • 联合概率,边际概率,条件概率的区别_非条件概率和边际概率

    联合概率,边际概率,条件概率的区别_非条件概率和边际概率一时忘了联合概率、边际概率、条件概率是怎么回事,回头看看。某离散分布:联合概率、边际概率、条件概率的关系:其中,Pr(X=x,Y=y)为“XY的联合概率”;Pr(X=x)为“X的边际概率”;Pr(X=x|Y=y)为“X基于Y的条件概率”;Pr(Y=y)为“Y的边际概率”;从上式子中可以看到:Pr(X=x,Y=y)=Pr(X=x|Y=y)*Pr(Y=y)

    2022年10月18日
    0
  • Ags 9.3 文档逐步上线

    Ags 9.3 文档逐步上线

    2021年7月27日
    46
  • Adobe Dreamweaver的使用教程

    Adobe Dreamweaver的使用教程1.打开AdobeDreamweaver软件2.打开后的界面3.新建一个站点,保存网页文件,图片,视频等4.输入站点的名字和保存的路径5.新建html文件6.选择设计模式7.制作你所需要的结果8.保存网页,才能在浏览器中预览

    2022年6月12日
    41
  • 读取金税盘数据库_一种基于金税盘控制系统登录和数据同步的方法与流程

    读取金税盘数据库_一种基于金税盘控制系统登录和数据同步的方法与流程本发明涉及税务开票领域,更具体地,涉及一种基于金税盘控制系统登录和数据同步的方法。背景技术:在以往的增值税销方开票操作中,销方用户在执行开票操作时,往往会出现当前用户信息与所使用的金税盘信息不匹配的情况,从而导致开票失败,需要调整用户数据或者更换金税盘。另外,系统中缺少对用户使用的金税盘数据的收集,无法有效的管理记录金税盘的使用情况,而且销方用户对应的库存信息和发票信息也存在数据不全的情况。技术实…

    2022年4月30日
    72
  • scrollIntoView()的用法[通俗易懂]

    scrollIntoView()的用法[通俗易懂]STARTscrollIntoView是一个与页面(容器)滚动相关的API(官方解释),该API只有boolean类型的参数能得到良好的支持(firefox36+都支持),所以在这里只讨论参数Boolean类型的情况。EXPLAIN调用方法为element.scrollIntoView()参数默认为true。参数为true时调用该函数,页面(或容器)发生滚动,使elem…

    2022年6月18日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号