Python爬取疫情中高风险地区名单

Python爬取疫情中高风险地区名单

  • 任务总况
    • 任务分析
    • 网站解析与代码实现
    • 数据输出与动态保存
    • 附上完整代码
    • 实验结果
    • 感谢与展望

任务总况

疫情当下,思考如何快速获取实时的中国风险地区名单助力疫情防控。

任务分析

通过前期的调研,发现中国政府网 中央人民政府门户网站只是通过小程序提供完整中高风险地区名单,并没有提供完整的疫情中高分析地区名单。

在百度中检索后发现,广东省人民政府网站全国中高风险地区名单在定期及时地更新《全国疫情中高风险地区名单》,方便了群众及时了解查看疫情动态,其数据来源于中国政府网,数据可靠性高。
Python爬取疫情中高风险地区名单_第1张图片

网站解析与代码实现

通过对广东省人民政府网站提供《全国疫情中高风险地区名单》的信息多日追踪后发现,其url固定(http://www.gd.gov.cn/gdywdt/zwzt/yqfk/content/post_3021711.html),可以作为定时爬取的途径。

采用 requests 代码完成数据爬取,代码如下:

def getHTML(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

分析其网页源代码,可以发现,所需要信息以文本形式在源代码中展示。

    
"viewList">

"zw-title">全国疫情中高风险地区名单(截至2021年1月17日18时)

"zw-info"> "time">时间 : 2021-01-16 21:49:24 "ly">来源 : 中国政府网
"right"> "print" οnclick="javascript:window.print()">【打印】 "changeFont" >【字体:"lFont">大 "mFont">中 "sFont">小】
"shareIcon"> 分享到:
"share-1" style="display: inline-block;" data-sites="wechat ,weibo, qq, qzone">
"zw">

"text-align: justify;">  高风险地区:

"text-align: justify;">"text-align: justify;">  河北省石家庄市藁城区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">黑龙江省绥化市望奎县惠七镇

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市新乐市长寿街道

"text-align: justify;">

"text-align: justify;">  中风险地区:

"text-align: justify;">  北京市顺义区高丽营镇东马各庄村

"text-align: justify;">  北京市顺义区高丽营镇张喜庄村

"text-align: justify;">  北京市顺义区南法信(地区)镇西杜兰村

"text-align: justify;">  北京市顺义区北石槽镇西赵各庄村

"text-align: justify;">  北京市顺义区北石槽镇北石槽村

"  " noextractcontent="true" style="text-align: justify;">  北京市顺义区赵全营镇联庄村

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">河北省石家庄市高新区赵村新区小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市高新区主语城小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市无极县东北远村

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市无极县西郝庄村

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市正定县空港花园小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市正定县孔村

"text-align: justify;">  河北省石家庄市新乐市

"text-align: justify;">  河北省石家庄市新华区都市阳光小区

"text-align: justify;">  河北省石家庄市新华区丽都河畔小区

"text-align: justify;">  河北省石家庄市桥西区平安小区

"text-align: justify;">  河北省石家庄市行唐县滨河小区

"text-align: justify;">  河北省石家庄市裕华区天海誉天下小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">河北省石家庄市裕华区晶彩苑小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">河北省石家庄市裕华区众美廊桥四季A区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">河北省石家庄市裕华区东方明珠小区

"text-align: justify;">  河北省石家庄市桥西区白金公寓

"text-align: justify;">  河北省石家庄市桥西区华润万象城

"text-align: justify;">  河北省石家庄市鹿泉区观峰嘉邸小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市正定县冯家庄村

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市正定县东平乐村

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市长安区博雅盛世小区E区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市长安区国赫红珊湾小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市高新区太行嘉苑小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市裕华区卓东小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市裕华区新华苑小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市鹿泉区银山花园新区小区

"  " noextractcontent="true" style="text-align: justify;">  河北省石家庄市新华区尚金苑小区

"text-align: justify;">  河北省邢台市南宫市天地名城小区

"text-align: justify;">  河北省邢台市南宫市天一和院小区

"text-align: justify;">  河北省邢台市南宫市凤岗街道办事处

"text-align: justify;">  河北省邢台市南宫市鸿兴小区

"text-align: justify;">  河北省邢台市南宫市文景名苑小区

"text-align: justify;">  河北省邢台市南宫市在水一方

"text-align: justify;">  河北省邢台市南宫市凤岗街道办事处十里铺居委会所辖区域

"text-align: justify;">  河北省邢台市南宫市大高村镇石家庄村

"  " noextractcontent="true" style="text-align: justify;">  河北省邢台市南宫市青年街清旺胡同

"  " noextractcontent="true" style="text-align: justify;">  河北省邢台市南宫市凤岗街道东胡居委会北小街

"  " noextractcontent="true" style="text-align: justify;">  河北省"text-align: justify;">廊坊市固安县英国宫5期

"  " noextractcontent="true" style="text-align: justify;">"text-align: justify;">  辽宁省沈阳市皇姑区长江南街197-1号楼

"text-align: justify;">  辽宁省沈阳市铁西区卫工北街22号楼

"text-align: justify;">"text-align: justify;">  辽宁省沈阳市铁西区笃工街道纳帕阳光

"text-align: justify;">  辽宁省大连市沙河口区星海湾街道星海公园社区

"text-align: justify;">  辽宁省大连市金普新区光中街道胜利西社区

"text-align: justify;">  辽宁省大连市金普新区拥政街道古城甲区

"text-align: justify;">  黑龙江省黑河市爱辉区喇嘛台社区学府佳苑小区

"text-align: justify;">  黑龙江省黑河市爱辉区热电社区兴边集资楼(2号楼)

"text-align: justify;">  黑龙江省黑河市爱辉区人保财险社区水岸华府小区

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省绥化市望奎县"text-align: justify;">(除惠七镇外)

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省齐齐哈尔市昂昂溪区大五福玛村

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省哈尔滨市香坊区香坊大街街道办事处香中社区古香街12号

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省哈尔滨市香坊区大庆路街道办事处电塔小区101栋7单元

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省哈尔滨市香坊区和平路街道办事处风华社区石化小区9栋6单元

"  " noextractcontent="true" style="text-align: justify;">  黑龙江省哈尔滨市和平路街道办事处上东社区万象上东小区E栋2单元

"  " noextractcontent="true" style="text-align: justify;">  吉林省长春市公主岭市范家屯镇兴华社区公安分局小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省长春市公主岭市东胜社区糖研小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省"text-align: justify;">长春市公主岭市富民社区鑫鑫家园小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省"text-align: justify;">"text-align: justify;">长春市公主岭市和谐社区二鞋帽小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省"text-align: justify;">"text-align: justify;">"text-align: justify;">长春市公主岭市"text-align: justify;">东胜社区"text-align: justify;">糖研所文明小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">长春市公主岭市永"text-align: justify;">胜社区粮库家属楼小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">长春市公主岭市凯旋社区一水家属楼小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省长春市公主岭市和谐社区阳光小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省长春市绿园区蓉桥壹号C区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省长春市绿园区大禹华邦B区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省长春市二道区鲁辉国际城荷兰小镇小区

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">吉林省通化市"text-align: justify;">东昌区新山社区林化科技楼

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">吉林省通化市东昌区"text-align: justify;">怡星园小区6号楼

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">吉林省通化市"text-align: justify;">东昌区"text-align: justify;">铁道北三新社区701号楼

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">吉林省通化市"text-align: justify;">东昌区铁道"text-align: justify;">北三新社区"text-align: justify;">705号楼

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">吉林省通化市东昌区"text-align: justify;">师范学院家属楼2号楼

"  " noextractcontent="true" style="text-align: justify;">  "text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">吉林省通化市东昌区"text-align: justify;">血站中行家属楼

"  " noextractcontent="true" style="text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">"text-align: justify;">

"  " noextractcontent="true" style="text-align: justify;">  国务院客户端小程序已上线疫情风险等级查询,可订阅全国各地疫情风险等级变更通知。你订阅的地区风险等级如发生变更,将会收到微信通知。扫描下方葵花码即可进行订阅。

"text-align:center">"nfw-cms-img" img-id="328486" src="http://www.gd.gov.cn/img/0/328/328486/3021711.jpg" alt="WechatIMG1622_meitu_1.jpg"/>

"fj" style="margin-top:15px;">

分析源代码,《全国中高风险地区名单》标题以 标签 “zw-title”出现,具体名单在 p标签内,因此考虑使用BeautifuSoup 对数据进行筛选提取,代码如下:

def getContent(url):
    html = getHTML(url)
    soup = BeautifulSoup(html, 'html.parser')
    paras_tmp = soup.select('.zw-title')+soup.select('p')
    paras = paras_tmp[0:]
    return paras

数据输出与动态保存

考虑名单是实时更新的,因此采用time.strftime随计算机时间重命名保存文件,代码如下:

def saveFile(text):

    datetimes = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
    fname = "D:/01Study/07Pycharm01/YiQingData011401/"+datetimes+r"Webdata.txt"
    f = open(fname, 'w')
    for t in text:
        if len(t) > 0:
            f.writelines(t.get_text() + "\n\n")
    f.close()

附上完整代码

#Python爬取中高风险地区名单代码
import re
import requests
import time
from bs4 import BeautifulSoup


def getHTML(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


def getContent(url):
    html = getHTML(url)
    soup = BeautifulSoup(html, 'html.parser')
    paras_tmp = soup.select('.zw-title')+soup.select('p')
    paras = paras_tmp[0:]
    return paras


def saveFile(text):

    datetimes = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
    fname = "D:/01Study/07Pycharm01/YiQingData011401/"+datetimes+r"Webdata.txt"
    f = open(fname, 'w')
    for t in text:
        if len(t) > 0:
            f.writelines(t.get_text() + "\n\n")
    f.close()


def main():
    url = 'http://www.gd.gov.cn/gdywdt/zwzt/yqfk/content/mpost_3021711.html'
    text = getContent(url)
    saveFile(text)


main()

实验结果

Python爬取疫情中高风险地区名单_第2张图片
打开数据如下:
Python爬取疫情中高风险地区名单_第3张图片

全国疫情中高风险地区名单(截至2021年1月17日18时)

高风险地区:

河北省石家庄市藁城区

黑龙江省绥化市望奎县惠七镇

河北省石家庄市新乐市长寿街道

中风险地区:

北京市顺义区高丽营镇东马各庄村

北京市顺义区高丽营镇张喜庄村

北京市顺义区南法信(地区)镇西杜兰村

北京市顺义区北石槽镇西赵各庄村

北京市顺义区北石槽镇北石槽村

北京市顺义区赵全营镇联庄村

河北省石家庄市高新区赵村新区小区

河北省石家庄市高新区主语城小区

河北省石家庄市无极县东北远村

河北省石家庄市无极县西郝庄村

河北省石家庄市正定县空港花园小区

河北省石家庄市正定县孔村

河北省石家庄市新乐市

河北省石家庄市新华区都市阳光小区

河北省石家庄市新华区丽都河畔小区

河北省石家庄市桥西区平安小区

河北省石家庄市行唐县滨河小区

河北省石家庄市裕华区天海誉天下小区

河北省石家庄市裕华区晶彩苑小区

河北省石家庄市裕华区众美廊桥四季A区

河北省石家庄市裕华区东方明珠小区

河北省石家庄市桥西区白金公寓

河北省石家庄市桥西区华润万象城

河北省石家庄市鹿泉区观峰嘉邸小区

河北省石家庄市正定县冯家庄村

河北省石家庄市正定县东平乐村

河北省石家庄市长安区博雅盛世小区E区

河北省石家庄市长安区国赫红珊湾小区

河北省石家庄市高新区太行嘉苑小区

河北省石家庄市裕华区卓东小区

河北省石家庄市裕华区新华苑小区

河北省石家庄市鹿泉区银山花园新区小区

河北省石家庄市新华区尚金苑小区

河北省邢台市南宫市天地名城小区

河北省邢台市南宫市天一和院小区

河北省邢台市南宫市凤岗街道办事处

河北省邢台市南宫市鸿兴小区

河北省邢台市南宫市文景名苑小区

河北省邢台市南宫市在水一方

河北省邢台市南宫市凤岗街道办事处十里铺居委会所辖区域

河北省邢台市南宫市大高村镇石家庄村

河北省邢台市南宫市青年街清旺胡同

河北省邢台市南宫市凤岗街道东胡居委会北小街

河北省廊坊市固安县英国宫5期

辽宁省沈阳市皇姑区长江南街197-1号楼

辽宁省沈阳市铁西区卫工北街22号楼

辽宁省沈阳市铁西区笃工街道纳帕阳光

辽宁省大连市沙河口区星海湾街道星海公园社区

辽宁省大连市金普新区光中街道胜利西社区

辽宁省大连市金普新区拥政街道古城甲区

黑龙江省黑河市爱辉区喇嘛台社区学府佳苑小区

黑龙江省黑河市爱辉区热电社区兴边集资楼(2号楼)

黑龙江省黑河市爱辉区人保财险社区水岸华府小区

黑龙江省绥化市望奎县(除惠七镇外)

黑龙江省齐齐哈尔市昂昂溪区大五福玛村

黑龙江省哈尔滨市香坊区香坊大街街道办事处香中社区古香街12号

黑龙江省哈尔滨市香坊区大庆路街道办事处电塔小区101栋7单元

黑龙江省哈尔滨市香坊区和平路街道办事处风华社区石化小区9栋6单元

黑龙江省哈尔滨市和平路街道办事处上东社区万象上东小区E栋2单元

吉林省长春市公主岭市范家屯镇兴华社区公安分局小区

吉林省长春市公主岭市东胜社区糖研小区

吉林省长春市公主岭市富民社区鑫鑫家园小区

吉林省长春市公主岭市和谐社区二鞋帽小区

吉林省长春市公主岭市东胜社区糖研所文明小区

吉林省长春市公主岭市永胜社区粮库家属楼小区

吉林省长春市公主岭市凯旋社区一水家属楼小区

吉林省长春市公主岭市和谐社区阳光小区

吉林省长春市绿园区蓉桥壹号C区

吉林省长春市绿园区大禹华邦B区

吉林省长春市二道区鲁辉国际城荷兰小镇小区

吉林省通化市东昌区新山社区林化科技楼

吉林省通化市东昌区怡星园小区6号楼

吉林省通化市东昌区铁道北三新社区701号楼

吉林省通化市东昌区铁道北三新社区705号楼

吉林省通化市东昌区师范学院家属楼2号楼

吉林省通化市东昌区血站中行家属楼

国务院客户端小程序已上线疫情风险等级查询,可订阅全国各地疫情风险等级变更通知。你订阅的地区风险等级如发生变更,将会收到微信通知。

感谢与展望

完成过程中参考了很多大佬的帖子,在此感谢。
生成的结果依旧不是方便使用,后续思考对爬取数据的深加工。

疫情并没有远去,请大家 少外出,勤洗手,戴口罩,多通风。

你可能感兴趣的:(python,html)