Data Analytics:COVID-19

采集“武汉市新冠肺炎疫情动态”信息

内容提纲

1. 网络爬虫基本原理

2. 爬取“武汉新冠肺炎疫情动态”数据

1. 网络爬虫基本原理

计算机网络基础:HTTP协议

网络爬虫基本原理:HTTP请求方法(本页参考W3Cschool相关内容

  • 根据HTTP标准,HTTP请求可以使用多种请求方法。
  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TR
序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

网络爬虫基本原理:HTTP状态码分类(本页参考W3Cschool相关内容

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

HTTP状态码的详细描述请参考:HTTP状态码列表

采集网络数据的步骤

步骤 工具
1 爬取目标网页 requests
2 提取有用信息 BeautifulSoup, re
3 保存数据 csv, txt, json
  • 采集网络数据:手动采集vs计算机程序采集
  • 学习网络爬虫:上帝视角vs探索者视角

正则表达式

本页内容取自Jake Vander Plas的 Whirlwind Tour of Python;相关资料可从GitHub获取。Python正则表达式的完整介绍请参考技术文档

Character Description Character Description
"\d" Match any digit "\D" Match any non-digit
"\s" Match any whitespace "\S" Match any non-whitespace
"\w" Match any alphanumeric char "\W" Match any non-alphanumeric char
Character Description Example
? Match zero or one repetitions of preceding "ab?" matches "a" or "ab"
* Match zero or more repetitions of preceding "ab*" matches "a", "ab", "abb", "abbb"...
+ Match one or more repetitions of preceding "ab+" matches "ab", "abb", "abbb"... but not "a"
{n} Match n repetitions of preeeding "ab{2}" matches "abb"
{m,n} Match between m and n repetitions of preceding "ab{2,3}" matches "abb" or "abbb"

2. 爬取“武汉新冠肺炎疫情动态”数据

假设我们已经拥有所有“武汉新冠肺炎疫情动态”页面的标题和链接(保存在“wh_announce_page_url.csv”文件中)

读取“wh_announce_page_url.csv”

In [1]:
import csv
titleList=[]
urlList=[]
with open('wh_announce_page_url.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        titleList.append(row['title'])
        urlList.append(row['urls'])
        print(row['title'],row['urls'])
武汉市新冠肺炎疫情动态(2020年3月5日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030609985
武汉市新冠肺炎疫情动态(2020年3月4日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030509963
武汉市新冠肺炎疫情动态(2020年3月3日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030409947
武汉市新冠肺炎疫情动态(2020年3月2日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030309923
武汉市新冠肺炎疫情动态(2020年3月1日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030209901
武汉市新冠肺炎疫情动态(2020年2月29日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030109892
武汉市新冠肺炎疫情动态(2020年2月28日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022909862
武汉市新冠肺炎疫情动态(2020年2月27日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022809843
武汉市新冠肺炎疫情动态(2020年2月26日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022709829
武汉市新冠肺炎疫情动态(2020年2月25日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022609812
武汉市新冠肺炎疫情动态(2020年2月24日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022509791
武汉市新冠肺炎疫情动态(2020年2月23日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022409774
武汉市新冠肺炎疫情动态(2020年2月22日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022309758
武汉市新冠肺炎疫情动态(2020年2月21日) http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020022209739
In [2]:
import requests
from bs4 import BeautifulSoup
headers={'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36'}
r=requests.get(urlList[0],headers=headers)
soup=BeautifulSoup(r.text,'html.parser')

有用的数据

分类 分类描述
报告时间(date) 报告时间(date)
新增数据 新增确诊数据(new_confirmed)
新增出院数据(new_released)
新增死亡(new_death)
新增疑似(new_suspected)
累计数据 累计确诊(all_confirmed)
各区累计确诊(confirmed_ja,jh,qk,hy,wc,qs,hs,dxh,cd,jx,hp,xz,hn)
累计出院(released)
累计死亡(death)
现有确诊(confirmed)
现有危重(extreme)
现有重症(severe)
现有疑似(suspected)
门诊接诊数据 发热(fever)
首诊(initial)
核酸检测数据(pcr)
  • 数据属性
    • 新增数据:当日0-24时
    • 累计数据:截止当日24时
    • 发热门诊数据:前日18时至当日18时
    • 核酸检测数据:当日检测量
  • 数据统计口径变更
    • 3月5日前:按行政区统计
    • 从3月5日起:按现住址统计,同时增加“东湖开发区”和“东湖风景区”两个统计区域

分析/探索:爬取3月4日数据

In [3]:
 print(titleList[1],':',urlList[1])
武汉市新冠肺炎疫情动态(2020年3月4日) : http://wjw.wuhan.gov.cn:80/front/web/showDetail/2020030509963

用requests爬取网页“武汉市新冠肺炎疫情动态(2020年3月4日)”

第一次尝试

In [4]:
import requests
url=urlList[1]
r=requests.get(url)
In [5]:
print(r)
print(r.text)  
<Response [406]>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>406</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
        <style type="text/css">
            body{margin: 0px;padding: 0px;font-size: 12px;font-family: '微软雅黑';color: #353535;background-color: #efefef;}
            .brdiv {clear: both;width: 100%;height: 0px;line-height: 0px;padding: 0px;margin: 0px;border: none;background-color: transparent;background-image: none;}
            .main_div{position: absolute;top: 50%;left: 50%;background-color: #fff;width: 800px;height: auto;transform: translate(-50%, -50%);box-shadow: 2px 5px 5px 2px #dfdfdf;padding-bottom: 20px;}
            .main_top_div{width: 100%; height: 10px; background-color: #0c8fa5;}
            .main_image_main_div{margin: 0px auto; text-align: center; padding: 30px 0px; width: 750px; border-bottom: solid 1px #dfdfdf;}
            .main_image_item{width: 215px;height: 110px;float: left;font-size: 80px;text-align: center;position: relative;color: #0c8fa5;}
            .main_image_item .main_title_item{width: 100%;height: 30px;float: left;font-size: 15px;font-weight: bold;color: #353535;}
            .main_image_item .fa-check-circle,.main_image_item .fa-times-circle{font-size: 20px;position: absolute;bottom: 0px;right: 60px;}
            .main_image_line{ width: 50px;height: 50px;float: left;font-size: 40px;color: #dcdcdc;text-align: center;margin-top: 40px;position: relative;}
            .main_image_line .fa-check-circle,.main_image_line .fa-times-circle{font-size: 20px;position: absolute;bottom: 19px;left: 16px;}
            .main_image_item .fa-check-circle,.main_image_line .fa-check-circle{color: #4CAF50;}
            .main_image_item .fa-times-circle,.main_image_line .fa-times-circle{color: #E91E63;}
            .code_message{width: 700px;height: auto;margin: 0px auto;padding: 10px 0px;}
            .code_num{float: left;font-size: 40px;margin-left: 50px;}
            .code_mes{float: left;font-size: 15px;margin-top: 25px;margin-left: 20px;}
            .other_message{width: 600px;height: auto;margin: 0px auto;padding: 10px 0px;}
            .other_title{font-size: 15px;height: 30px;}
            .other_item{float: left;height: 25px;line-height: 25px;color: #959595;overflow: hidden;}
        </style>
        <div class="main_div">
            <div class="main_top_div"></div>
            <div class="main_image_main_div">
                <div class="main_image_item"><div class="main_title_item">用户</div><span class="fa fa-desktop"></span></div>
                <div class="main_image_line"><span class="fa fa-exchange"></span><span class="fa fa-times-circle"></span></div>
                <div class="main_image_item"><div class="main_title_item">平台</div><span class="fa fa-cloud"></span></div>
                <div class="main_image_line"><span class="fa fa-exchange"></span><span class="fa fa-check-circle"></span></div>
                <div class="main_image_item"><div class="main_title_item">源站</div><span class="fa fa-server"></span></div>
                <div class="brdiv"></div>
            </div>
            <div class="code_message">
                <div class="code_num">406</div><div class="code_mes">访问被云平台拦截</div><div class="brdiv"></div>
            </div>
            <div class="other_message">
                <div class="other_title">事件编号:</div><div class="other_item" id="uuid"></div><div class="brdiv"></div>
            </div>
            <div class="other_message">
                <div class="other_title">可能原因:</div><div class="brdiv"></div>
                <div class="other_item">1.触发云平台防护规则</div><div class="brdiv"></div>
            </div>
            <div class="other_message">
                <div class="other_title">访问信息:</div><div class="brdiv"></div>
                <div class="other_item">1.访问时间: <span id="data_time"></span></div><div class="brdiv"></div>
                <div class="other_item">2.源IP: <span id="src_ip"></span></div><div class="brdiv"></div>
                <div class="other_item">3.目的IP: <span id="dst_ip"></span> 目的端口: <span id="dst_port"></span></div><div class="brdiv"></div>
                <div class="other_item">4.访问地址: <span id="url"></span></div><div class="brdiv"></div>
                <div class="other_item">5.浏览器UA: <span id="useragent"></span></div><div class="brdiv"></div>
            </div>
        </div>
        <script type="text/javascript">
            document.getElementById("data_time").innerHTML = new Date().toLocaleString();
            document.getElementById("useragent").innerHTML = navigator.userAgent;
            var requset_obj = new XMLHttpRequest();
            requset_obj.open("GET", window.location.href, false);
            requset_obj.send();
            document.getElementById("uuid").innerHTML = requset_obj.getResponseHeader('uuid');
            document.getElementById("url").innerHTML = requset_obj.getResponseHeader('req_uri');
            document.getElementById("src_ip").innerHTML = requset_obj.getResponseHeader('user_ip');
            document.getElementById("dst_ip").innerHTML = requset_obj.getResponseHeader('node_ip');
            document.getElementById("dst_port").innerHTML = requset_obj.getResponseHeader('req_port');
        </script>
    </body>
</html>

  • 第二次尝试:添加headers信息
In [6]:
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
r=requests.get(url,headers=headers)
In [7]:
print(r)
print(r.text) 
<Response [200]>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>武汉市卫生健康委员会</title>
<meta name="SiteName" content="武汉市卫生健康委员会">
<meta name="SiteDomain" content="wjw.wuhan.gov.cn">
<meta name="SiteIDCode" content="4201000001">
<link href="http://wjw.wuhan.gov.cn:80/css/style_blue.css" rel="stylesheet" type="text/css" />
<link href="http://wjw.wuhan.gov.cn:80/css/reset_blue.css" rel="stylesheet" type="text/css" />
<link href="http://wjw.wuhan.gov.cn:80/css/default_blue.css" rel="stylesheet" type="text/css" />
<link href="http://wjw.wuhan.gov.cn:80/ueditor/third-party/video-js/video-js.min.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://wjw.wuhan.gov.cn:80/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="http://wjw.wuhan.gov.cn:80/js/script.js"></script>
<script type="text/javascript" src="http://wjw.wuhan.gov.cn:80/js/page-x.js"></script>
<script type="text/javascript" src="http://wjw.wuhan.gov.cn:80/ueditor/ueditor.parse.js"></script>
<script type="text/javascript" src="http://wjw.wuhan.gov.cn:80/ueditor/third-party/video-js/video.js"></script>

<script type="text/javascript">
		var url = "";
	    var re = new RegExp('http')
	    if(re.test(url)) {
	    	var answer = confirm("该链接为外部链接,是否跳转?");
	    	if(answer){
	    		var tempwindow=window.open(); // 先打开页面
	    		tempwindow.location=url; // 后更改页面地址
	    		window.history.go(-1);
	    	}else{
	    		window.history.go(-1);
	    	}
	    }
</script>
</head>
<body id="body" class="backdrop-2">
	<div class="header">
	<section class="top">
		<span style="color: #777; line-height: 40px;"> <script>
			var enabled = 0;
			today = new Date();
			if (today.getDay() == 0)
				day = "星期日";
			if (today.getDay() == 1)
				day = "星期一";
			if (today.getDay() == 2)
				day = "星期二";
			if (today.getDay() == 3)
				day = "星期三";
			if (today.getDay() == 4)
				day = "星期四";
			if (today.getDay() == 5)
				day = "星期五";
			if (today.getDay() == 6)
				day = "星期六";
			date = "" + (today.getFullYear()) + "年" + (today.getMonth() + 1)
					+ "月" + today.getDate() + "日  " + " " + day;
			document.write(date);
		</script>
		</span> <span class="toplj"><a href="http://www.nhc.gov.cn"
			target="_blank">国家卫生健康委</a><a href="http://www.hbwsjs.gov.cn"
			target="_blank">湖北省卫生健康委</a><a href="http://www.wuhan.gov.cn"
			target="_blank">武汉市人民政府</a></span>
	</section>

	<div class="logobx">
		<a href="http://wjw.wuhan.gov.cn:80"><img class="logo"
			src="http://wjw.wuhan.gov.cn:80/images/index/logo.png" /></a>

		<div style="float: right; padding-top: 34px;">
			<IFRAME height=70 marginHeight=0
				src="http://i.tianqi.com/index.php?c=code&id=38&icon=1&num=3"
				frameBorder=0 width=420 allowTransparency name=weather_inc
				marginWidth=0 scrolling=no></IFRAME>
		</div>
	</div>

	<nav>
		<a href="http://wjw.wuhan.gov.cn:80" class="nav0">首&nbsp;&nbsp;页</a> 
				<a href="http://wjw.wuhan.gov.cn:80/front/web/main/xwzx.html" class="nav1">新闻中心</a>
		<a href="http://wjw.wuhan.gov.cn:80/front/web/main/zwgk.html" class="nav2">政务公开</a>
		<a href="http://zwfw.hubei.gov.cn/lawguide/dept/qzqd.jspx?department﹦11420100010889245Q" class="nav3">办事服务</a>
		<a href="http://wjw.wuhan.gov.cn:80/front/web/main/jlhd.html" class="nav4">交流互动</a>
		<a href="http://wjw.wuhan.gov.cn:80/front/web/main/ztzl.html" class="nav5">专题专栏</a>
		<div class="search">
			<form action="http://wjw.wuhan.gov.cn:80/front/web/search" method="post">
				<div class="FL" style="width: 160px; height: 30px;">
					<input type="text"
						style="width: 150px; height: 30px; line-height: 30px;"
						name="title" id="inpKey" value="" required="required"
						placeholder="请输入搜索内容" />
				</div>
				<input class="FM" type="image" style="height: 32px;"
					src="http://wjw.wuhan.gov.cn:80/images/index/search.png" />
			</form>
		</div>
	</nav>
</div><div class="main" id="">
		<div class="Bszn">
			<div class="wldH">
				<div style="display: none" id="chnlName"></div>
				<iframe frameborder="0" scrolling="no" height="38px" width="100%"
					src="/front/web/getArtTitle/803"> </iframe>

			</div>
			<div class="showZxft">
				<div class="showZxftH" style="border-bottom: 1px solid #ccc">
					<h1 style="font-weight: bold; color: #0d76b0; font-size: 23px;"
						id="detailTitle">武汉市新冠肺炎疫情动态(2020年3月4日)</h1>
					<h1
						style="padding-top: 15px; font-weight: bold; color: #0d76b0; font-size: 16px;"></h1>
					<h1 style="font-weight: bold; color: #0d76b0; font-size: 17px;"
						id="detailTitle"></h1>
					<h1
						style="padding-top: 15px; font-weight: bold; color: #0d76b0; font-size: 16px;"></h1>					
					<h2>
					    
						发布机构:&nbsp;武汉市卫生健康委员会
						&nbsp;|&nbsp;发布时间:&nbsp;2020-03-05 15:25:42 &nbsp;|&nbsp;
						点击数:&nbsp;<span id="pvCount">7506</span>&nbsp;|&nbsp;
						字号:&nbsp;<a href="javascript:chF(0);">大</a> <a
							href="javascript:chF(1);">中</a> <a href="javascript:chF(2);">小</a>
					</h2>					
					<div id="detailContent" style="margin-top: 20px;">

						<div class="TRS_Editor"><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size:21px;font-family:仿宋_GB2312">2020</span><span style="font-size:  21px;font-family:仿宋_GB2312">年3月4日</span><span style="font-size:21px;font-family:仿宋_GB2312">0-24</span><span style="font-size: 21px;font-family:仿宋_GB2312">时,全市新增确诊病例131例,全市新增出院病例1426例,新增死亡病例23例,新增疑似病例61例。</span></p><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size:21px;font-family:仿宋_GB2312">截至3月4日24时,全市累计报告确诊病例49671例。其中(大疫情网按行政区统计):江岸区4352例、江汉区7344例、硚口区7305例、汉阳区3605例、武昌区8315例、青山区2985例、洪山区5109例、东西湖区2604例、蔡甸区1993例、江夏区1704例、黄陂区1780例、新洲区1023例、武汉开发区(汉南)1552例。累计治愈出院26316人,累计死亡2305人。全市现有确诊病例21050人(危重894人,重症4448人),现有疑似病例247例。</span></p><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size: 21px; font-family: 仿宋_GB2312;">3</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">月3日</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">18</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">时-3月4日18时,全市发热门诊接诊1705人次,较前日减少122人次,其中首诊1062人。3月4日当日,全市核酸检测23136人。</span></p><p><br/></p></div>
					</div>

					<div class="showprint">
						<input type="image" src="http://wjw.wuhan.gov.cn:80/images/index/show_11.jpg"
							onClick="javascript:window.print()" /> <input type="image"
							src="http://wjw.wuhan.gov.cn:80/images/index/show_13.jpg"
							onClick="javascript:window.close()" />
					</div>

				</div>
			</div>

		</div>
	</div>

	<div class="footer" style="height: 290px;">
	<section class="top">
		<div class="index5">
			<select style="cursor: pointer;"
				onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0">
				<option>-副省级城市卫生健康委-</option> 
				<option value="http://www.hrbwsj.gov.cn/" title="哈尔滨市 ">·哈尔滨市 </option>

				<option value="http://wjw.changchun.gov.cn/" title="长春市 ">·长春市 </option>

				<option value="http://www.sywsnet.com/swsj/" title="沈阳市">·沈阳市</option>

				<option value="http://www.hfpcdlm.dl.gov.cn" title="大连市 ">·大连市 </option>

				<option value="http://www.jnhfpc.gov.cn/" title="济南市">·济南市</option>

				<option value="http://wsjsw.qingdao.gov.cn" title="青岛市">·青岛市</option>

				<option value="http://www.njh.gov.cn/" title="南京市">·南京市</option>

				<option value="http://www.hzwsjsw.gov.cn/" title="杭州市">·杭州市</option>

				<option value="http://www.nbwjw.gov.cn/" title="宁波市 ">·宁波市 </option>

				<option value="http://hfpc.xm.gov.cn/" title="厦门市 ">·厦门市 </option>

				<option value="http://www.gzmed.gov.cn" title="广州市">·广州市</option>

				<option value="http://www.szhfpc.gov.cn" title="深圳市">·深圳市</option>

				<option value="http://cdwjw.chengdu.gov.cn/" title="成都市 ">·成都市 </option>

				<option value="http://xawjw.xa.gov.cn/ptl/index.html" title="西安市">·西安市</option>
			</select> <select name="" style="cursor: pointer;"
				onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0">
				<option>-省内各市州卫生健康委-</option> 
				<option value="http://wjw.wuhan.gov.cn/" title="武汉市">·武汉市</option>

				<option value="http://wjw.xiangyang.gov.cn/" title="襄阳市">·襄阳市</option>

				<option value="http://wjw.yichang.gov.cn/" title="宜昌市">·宜昌市</option>

				<option value="http://www.hswsjsw.gov.cn/" title="黄石市">·黄石市</option>

				<option value="http://wjw.shiyan.gov.cn/" title="十堰市">·十堰市</option>

				<option value="http://www.hbjzpop.gov.cn/" title="荆州市 ">·荆州市 </option>

				<option value="http://wjw.jingmen.gov.cn/" title="荆门市">·荆门市</option>

				<option value="http://wjw.xiaogan.gov.cn/" title="孝感市  ">·孝感市  </option>

				<option value="http://wjw.hg.gov.cn/" title="黄冈市">·黄冈市</option>

				<option value="http://wjw.xianning.gov.cn/" title="咸宁市   ">·咸宁市   </option>

				<option value="http://wjj.enshi.gov.cn/" title="恩施州    ">·恩施州    </option>

				<option value="http://wjw.xiantao.gov.cn/" title="仙桃市      ">·仙桃市      </option>

				<option value="http://wjw.suizhou.gov.cn/" title="随州市        ">·随州市        </option>

				<option value="http://www.hbqj.gov.cn/wsjs/" title="潜江市   ">·潜江市   </option>

				<option value="http://wjw.ezhou.gov.cn/?AspxAutoDetectCookieSupport﹦1" title="鄂州市 ">·鄂州市 </option>
			</select> <select name="" style="cursor: pointer;"
				onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0">
				<option>-卫生健康委-</option> 
				<option value=" http://www.jiangan.gov.cn/bmzl/qwjw/ldjj_3730/" title="江岸区">·江岸区</option>

				<option value="http://www.jianghan.gov.cn/html/gzbm/qwjw/" title="江汉区">·江汉区</option>

				<option value=" http://www.qiaokou.gov.cn/xxgk/gkxx/whsqkqwshjhsywyh/" title="硚口区">·硚口区</option>

				<option value="http://www.hanyang.gov.cn/list-817.html" title="汉阳区">·汉阳区</option>

				<option value="http://www.wuchang.gov.cn/wcqzfzz/zwgk1/zfgzjg/qwjw58/614493/index.html" title="武昌区">·武昌区</option>

				<option value=" http://xxgk.qingshan.gov.cn/xxgkml/zzjg/" title="青山区(化工区)">·青山区(化工区)</option>

				<option value="http://www.hongshan.gov.cn/qwjw/jgsz/" title="洪山区">·洪山区</option>

				<option value="http://zwgk.caidian.gov.cn/info/nIndex.jsp?node_id﹦GKwjw" title="蔡甸区">·蔡甸区</option>

				<option value="http://www.jiangxia.gov.cn/qwshjhsywyh/index.jhtml" title="江夏区">·江夏区</option>

				<option value="http://www.dxh.gov.cn/html/zwgk/qzfxxgkml/zzjg/qzfbm/2016/0718/40939.shtml" title="东西湖区">·东西湖区</option>

				<option value="http://www.huangpi.gov.cn/zwgk/xxgkzl/xxgkml/jbxxgk/jgzz/201008/t20100825_54093.html" title="黄陂区">·黄陂区</option>

				<option value="http://www.whxinzhou.gov.cn/xxgk/xxgkdw/201412/t20141212_25002.shtml" title="新洲区">·新洲区</option>

				<option value="http://www.wedz.gov.cn/jgsz/index.jhtml" title="经开区(汉南区)">·经开区(汉南区)</option>

				<option value="http://www.wehdz.gov.cn/gk/jggk/nsjg/3390.htm" title="东湖高新区">·东湖高新区</option>

				<option value=" http://www.whdonghu.gov.cn/e/action/ShowInfo.php?classid﹦24&id﹦434" title="东湖风景区">·东湖风景区</option>
			</select> <select name="" style="cursor: pointer;"
				onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0">
				<option>-委属医疗机构-</option> 
				<option value="http://www.whyyy.com.cn/" title="市第一医院 ">·市第一医院 </option>

				<option value="http://www.zxhospital.com/" title="市中心医院  ">·市中心医院  </option>

				<option value="http://www.whsyy.net/" title="市第三医院 ">·市第三医院 </option>

				<option value="http://www.zgwhfe.com/" title="武汉儿童医院 ">·武汉儿童医院 </option>

				<option value="http://www.wdyy.com/" title="市武东医院 ">·市武东医院 </option>

				<option value="http://www.whtcm.com/" title="市中医医院 ">·市中医医院 </option>

				<option value="http://www.whjy.com.cn/" title="市金银潭医院">·市金银潭医院</option>

				<option value="http://www.chinapsy.com/" title="市精神卫生中心 ">·市精神卫生中心 </option>

				<option value="http://www.whwcyy.com/" title="市武昌医院 ">·市武昌医院 </option>

				<option value="http://www.purenyy.com/" title="市普仁医院 ">·市普仁医院 </option>

				<option value="http://www.whjhb.org/" title="市肺科医院     ">·市肺科医院     </option>

				<option value="http://www.puaihospital.net/" title="市第四医院">·市第四医院</option>

				<option value="http://www.whsdhyy.com/" title="市东湖医院">·市东湖医院</option>
			</select> <select name="" style="cursor: pointer;"
				onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0">
				<option>-委属公卫及社会服务机构-</option> 
				<option value="http://www.whcdc.org/" title="市疾控中心  ">·市疾控中心  </option>

				<option value="http://whwjjd.org.cn/index.shtml" title="市卫生计生执法督察总队">·市卫生计生执法督察总队</option>

				<option value="http://www.whpfs.cn/" title="市皮防院">·市皮防院</option>

				<option value="http://www.whzfy.org.cn/" title="市职防院">·市职防院</option>

				<option value="http://www.whblood.org.cn" title="武汉血液中心">·武汉血液中心</option>

				<option value="http://whyks.org.cn/" title="市卫生计生信息中心">·市卫生计生信息中心</option>
			</select>
		</div>
	</section>

	<div class="middle">
		<hgroup class="bottom">
			<a style="color: white;" href="http://wjw.wuhan.gov.cn:80/front/web/wzlmdt">网站地图</a>&nbsp;
			主办:武汉市卫生健康委员会 承办:武汉市卫生健康委员会办公室
			<BR> 地址:武汉市江岸区江汉北路20号 电话:027-12320 邮编:430014
			<br />
			<a style="color: white;" target="_blank"
				href="http://www.beian.miit.gov.cn/"
				style="display:inline-block;text-decoration:none;height:20px;line-height:20px;">鄂ICP备19006884号-2</a>&nbsp;&nbsp;
			<a style="color: white;" target="_blank"
				href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=42010202000851"
				style="display:inline-block;text-decoration:none;height:20px;line-height:20px;">鄂公网安备42010202000851号</a>&nbsp;&nbsp;政府网站标识码:4201000001
			<br />您是第&nbsp;
			<span id="siteCount"></span>19110511&nbsp;位访问者<BR>
			<img src="http://wjw.wuhan.gov.cn:80/images/index/red_error.png" width="80"
				height="80" />
			<script id="_jiucuo_" sitecode='4201000001'
				src='http://pucha.kaipuyun.cn/exposure/jiucuo.js'></script>
			<div>
				<a href="http://www.creditchina.gov.cn/" target="_blank"><img
					src="http://www.wuhan.gov.cn/newimages/xyzg.png"></a><a
					href="http://www.hbcredit.gov.cn/" target="_blank"><img
					src="http://www.wuhan.gov.cn/newimages/xyhb.png"></a><a
					href="https://www.creditwh.gov.cn/" target="_blank"><img
					src="http://www.wuhan.gov.cn/newimages/xywh.png"></a>
			</div>
		</hgroup>
		<!-- 第三方统计代码 -->
		<div hidden>
			<script>
				var _hmt = _hmt || [];
				(function() {
					var hm = document.createElement("script");
					hm.src = "https://hm.baidu.com/hm.js?ac084bfb4d82ed021aed64d30fe62ff0";
					var s = document.getElementsByTagName("script")[0];
					s.parentNode.insertBefore(hm, s);
				})();
			</script>
		</div>

		<!-- 第三方分享代码 -->
		<a class="bshareDiv" href="http://www.bshare.cn/share">分享按钮</a>
		<script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/buttonLite.js#uuid=&amp;style=3&amp;fs=4&amp;textcolor=#fff&amp;bgcolor=#06C&amp;text=分享到"></script>
		<!--<script>
			window._bd_share_config = {
				"common" : {
					"bdSnsKey" : {},
					"bdText" : "",
					"bdMini" : "2",
					"bdMiniList" : false,
					"bdPic" : "",
					"bdStyle" : "0",
					"bdSize" : "16"
				},
				"slide" : {
					"type" : "slide",
					"bdImg" : "2",
					"bdPos" : "right",
					"bdTop" : "100"
				}
			};
			with (document)
				0[(getElementsByTagName('head')[0] || body)
						.appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='
						+ ~(-new Date() / 36e5)];
		</script>-->
		<script>
			$('area').click(function() {
				if (this.href.indexOf(document.domain) < 0) {
					return confirm('该链接为外部链接,是否继续?');
				}
			});
		</script>
	</div></body>
</html>

用BeautifulSoup解析html文件

In [8]:
from bs4 import BeautifulSoup
soup=BeautifulSoup(r.text,'html.parser')
In [9]:
soup
Out[9]:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<title>武汉市卫生健康委员会</title>
<meta content="武汉市卫生健康委员会" name="SiteName"/>
<meta content="wjw.wuhan.gov.cn" name="SiteDomain"/>
<meta content="4201000001" name="SiteIDCode"/>
<link href="http://wjw.wuhan.gov.cn:80/css/style_blue.css" rel="stylesheet" type="text/css"/>
<link href="http://wjw.wuhan.gov.cn:80/css/reset_blue.css" rel="stylesheet" type="text/css"/>
<link href="http://wjw.wuhan.gov.cn:80/css/default_blue.css" rel="stylesheet" type="text/css"/>
<link href="http://wjw.wuhan.gov.cn:80/ueditor/third-party/video-js/video-js.min.css" rel="stylesheet" type="text/css"/>
<script src="http://wjw.wuhan.gov.cn:80/js/jquery-3.3.1.js" type="text/javascript"></script>
<script src="http://wjw.wuhan.gov.cn:80/js/script.js" type="text/javascript"></script>
<script src="http://wjw.wuhan.gov.cn:80/js/page-x.js" type="text/javascript"></script>
<script src="http://wjw.wuhan.gov.cn:80/ueditor/ueditor.parse.js" type="text/javascript"></script>
<script src="http://wjw.wuhan.gov.cn:80/ueditor/third-party/video-js/video.js" type="text/javascript"></script>
<script type="text/javascript">
		var url = "";
	    var re = new RegExp('http')
	    if(re.test(url)) {
	    	var answer = confirm("该链接为外部链接,是否跳转?");
	    	if(answer){
	    		var tempwindow=window.open(); // 先打开页面
	    		tempwindow.location=url; // 后更改页面地址
	    		window.history.go(-1);
	    	}else{
	    		window.history.go(-1);
	    	}
	    }
</script>
</head>
<body class="backdrop-2" id="body">
<div class="header">
<section class="top">
<span style="color: #777; line-height: 40px;"> <script>
			var enabled = 0;
			today = new Date();
			if (today.getDay() == 0)
				day = "星期日";
			if (today.getDay() == 1)
				day = "星期一";
			if (today.getDay() == 2)
				day = "星期二";
			if (today.getDay() == 3)
				day = "星期三";
			if (today.getDay() == 4)
				day = "星期四";
			if (today.getDay() == 5)
				day = "星期五";
			if (today.getDay() == 6)
				day = "星期六";
			date = "" + (today.getFullYear()) + "年" + (today.getMonth() + 1)
					+ "月" + today.getDate() + "日  " + " " + day;
			document.write(date);
		</script>
</span> <span class="toplj"><a href="http://www.nhc.gov.cn" target="_blank">国家卫生健康委</a><a href="http://www.hbwsjs.gov.cn" target="_blank">湖北省卫生健康委</a><a href="http://www.wuhan.gov.cn" target="_blank">武汉市人民政府</a></span>
</section>
<div class="logobx">
<a href="http://wjw.wuhan.gov.cn:80"><img class="logo" src="http://wjw.wuhan.gov.cn:80/images/index/logo.png"/></a>
<div style="float: right; padding-top: 34px;">
<iframe allowtransparency="" frameborder="0" height="70" marginheight="0" marginwidth="0" name="weather_inc" scrolling="no" src="http://i.tianqi.com/index.php?c=code&amp;id=38&amp;icon=1&amp;num=3" width="420"></iframe>
</div>
</div>
<nav>
<a class="nav0" href="http://wjw.wuhan.gov.cn:80">首  页</a>
<a class="nav1" href="http://wjw.wuhan.gov.cn:80/front/web/main/xwzx.html">新闻中心</a>
<a class="nav2" href="http://wjw.wuhan.gov.cn:80/front/web/main/zwgk.html">政务公开</a>
<a class="nav3" href="http://zwfw.hubei.gov.cn/lawguide/dept/qzqd.jspx?department﹦11420100010889245Q">办事服务</a>
<a class="nav4" href="http://wjw.wuhan.gov.cn:80/front/web/main/jlhd.html">交流互动</a>
<a class="nav5" href="http://wjw.wuhan.gov.cn:80/front/web/main/ztzl.html">专题专栏</a>
<div class="search">
<form action="http://wjw.wuhan.gov.cn:80/front/web/search" method="post">
<div class="FL" style="width: 160px; height: 30px;">
<input id="inpKey" name="title" placeholder="请输入搜索内容" required="required" style="width: 150px; height: 30px; line-height: 30px;" type="text" value=""/>
</div>
<input class="FM" src="http://wjw.wuhan.gov.cn:80/images/index/search.png" style="height: 32px;" type="image"/>
</form>
</div>
</nav>
</div><div class="main" id="">
<div class="Bszn">
<div class="wldH">
<div id="chnlName" style="display: none"></div>
<iframe frameborder="0" height="38px" scrolling="no" src="/front/web/getArtTitle/803" width="100%"> </iframe>
</div>
<div class="showZxft">
<div class="showZxftH" style="border-bottom: 1px solid #ccc">
<h1 id="detailTitle" style="font-weight: bold; color: #0d76b0; font-size: 23px;">武汉市新冠肺炎疫情动态(2020年3月4日)</h1>
<h1 style="padding-top: 15px; font-weight: bold; color: #0d76b0; font-size: 16px;"></h1>
<h1 id="detailTitle" style="font-weight: bold; color: #0d76b0; font-size: 17px;"></h1>
<h1 style="padding-top: 15px; font-weight: bold; color: #0d76b0; font-size: 16px;"></h1>
<h2>
					    
						发布机构: 武汉市卫生健康委员会
						 | 发布时间: 2020-03-05 15:25:42  | 
						点击数: <span id="pvCount">7506</span> | 
						字号: <a href="javascript:chF(0);">大</a> <a href="javascript:chF(1);">中</a> <a href="javascript:chF(2);">小</a>
</h2>
<div id="detailContent" style="margin-top: 20px;">
<div class="TRS_Editor"><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size:21px;font-family:仿宋_GB2312">2020</span><span style="font-size:  21px;font-family:仿宋_GB2312">年3月4日</span><span style="font-size:21px;font-family:仿宋_GB2312">0-24</span><span style="font-size: 21px;font-family:仿宋_GB2312">时,全市新增确诊病例131例,全市新增出院病例1426例,新增死亡病例23例,新增疑似病例61例。</span></p><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size:21px;font-family:仿宋_GB2312">截至3月4日24时,全市累计报告确诊病例49671例。其中(大疫情网按行政区统计):江岸区4352例、江汉区7344例、硚口区7305例、汉阳区3605例、武昌区8315例、青山区2985例、洪山区5109例、东西湖区2604例、蔡甸区1993例、江夏区1704例、黄陂区1780例、新洲区1023例、武汉开发区(汉南)1552例。累计治愈出院26316人,累计死亡2305人。全市现有确诊病例21050人(危重894人,重症4448人),现有疑似病例247例。</span></p><p style="text-indent: 43px; line-height: 3em; text-align: justify;"><span style="font-size: 21px; font-family: 仿宋_GB2312;">3</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">月3日</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">18</span><span style="font-size: 21px; font-family: 仿宋_GB2312;">时-3月4日18时,全市发热门诊接诊1705人次,较前日减少122人次,其中首诊1062人。3月4日当日,全市核酸检测23136人。</span></p><p><br/></p></div>
</div>
<div class="showprint">
<input onclick="javascript:window.print()" src="http://wjw.wuhan.gov.cn:80/images/index/show_11.jpg" type="image"/> <input onclick="javascript:window.close()" src="http://wjw.wuhan.gov.cn:80/images/index/show_13.jpg" type="image"/>
</div>
</div>
</div>
</div>
</div>
<div class="footer" style="height: 290px;">
<section class="top">
<div class="index5">
<select onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0" style="cursor: pointer;">
<option>-副省级城市卫生健康委-</option>
<option title="哈尔滨市 " value="http://www.hrbwsj.gov.cn/">·哈尔滨市 </option>
<option title="长春市 " value="http://wjw.changchun.gov.cn/">·长春市 </option>
<option title="沈阳市" value="http://www.sywsnet.com/swsj/">·沈阳市</option>
<option title="大连市 " value="http://www.hfpcdlm.dl.gov.cn">·大连市 </option>
<option title="济南市" value="http://www.jnhfpc.gov.cn/">·济南市</option>
<option title="青岛市" value="http://wsjsw.qingdao.gov.cn">·青岛市</option>
<option title="南京市" value="http://www.njh.gov.cn/">·南京市</option>
<option title="杭州市" value="http://www.hzwsjsw.gov.cn/">·杭州市</option>
<option title="宁波市 " value="http://www.nbwjw.gov.cn/">·宁波市 </option>
<option title="厦门市 " value="http://hfpc.xm.gov.cn/">·厦门市 </option>
<option title="广州市" value="http://www.gzmed.gov.cn">·广州市</option>
<option title="深圳市" value="http://www.szhfpc.gov.cn">·深圳市</option>
<option title="成都市 " value="http://cdwjw.chengdu.gov.cn/">·成都市 </option>
<option title="西安市" value="http://xawjw.xa.gov.cn/ptl/index.html">·西安市</option>
</select> <select name="" onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0" style="cursor: pointer;">
<option>-省内各市州卫生健康委-</option>
<option title="武汉市" value="http://wjw.wuhan.gov.cn/">·武汉市</option>
<option title="襄阳市" value="http://wjw.xiangyang.gov.cn/">·襄阳市</option>
<option title="宜昌市" value="http://wjw.yichang.gov.cn/">·宜昌市</option>
<option title="黄石市" value="http://www.hswsjsw.gov.cn/">·黄石市</option>
<option title="十堰市" value="http://wjw.shiyan.gov.cn/">·十堰市</option>
<option title="荆州市 " value="http://www.hbjzpop.gov.cn/">·荆州市 </option>
<option title="荆门市" value="http://wjw.jingmen.gov.cn/">·荆门市</option>
<option title="孝感市  " value="http://wjw.xiaogan.gov.cn/">·孝感市  </option>
<option title="黄冈市" value="http://wjw.hg.gov.cn/">·黄冈市</option>
<option title="咸宁市   " value="http://wjw.xianning.gov.cn/">·咸宁市   </option>
<option title="恩施州    " value="http://wjj.enshi.gov.cn/">·恩施州    </option>
<option title="仙桃市      " value="http://wjw.xiantao.gov.cn/">·仙桃市      </option>
<option title="随州市        " value="http://wjw.suizhou.gov.cn/">·随州市        </option>
<option title="潜江市   " value="http://www.hbqj.gov.cn/wsjs/">·潜江市   </option>
<option title="鄂州市 " value="http://wjw.ezhou.gov.cn/?AspxAutoDetectCookieSupport﹦1">·鄂州市 </option>
</select> <select name="" onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0" style="cursor: pointer;">
<option>-卫生健康委-</option>
<option title="江岸区" value=" http://www.jiangan.gov.cn/bmzl/qwjw/ldjj_3730/">·江岸区</option>
<option title="江汉区" value="http://www.jianghan.gov.cn/html/gzbm/qwjw/">·江汉区</option>
<option title="硚口区" value=" http://www.qiaokou.gov.cn/xxgk/gkxx/whsqkqwshjhsywyh/">·硚口区</option>
<option title="汉阳区" value="http://www.hanyang.gov.cn/list-817.html">·汉阳区</option>
<option title="武昌区" value="http://www.wuchang.gov.cn/wcqzfzz/zwgk1/zfgzjg/qwjw58/614493/index.html">·武昌区</option>
<option title="青山区(化工区)" value=" http://xxgk.qingshan.gov.cn/xxgkml/zzjg/">·青山区(化工区)</option>
<option title="洪山区" value="http://www.hongshan.gov.cn/qwjw/jgsz/">·洪山区</option>
<option title="蔡甸区" value="http://zwgk.caidian.gov.cn/info/nIndex.jsp?node_id﹦GKwjw">·蔡甸区</option>
<option title="江夏区" value="http://www.jiangxia.gov.cn/qwshjhsywyh/index.jhtml">·江夏区</option>
<option title="东西湖区" value="http://www.dxh.gov.cn/html/zwgk/qzfxxgkml/zzjg/qzfbm/2016/0718/40939.shtml">·东西湖区</option>
<option title="黄陂区" value="http://www.huangpi.gov.cn/zwgk/xxgkzl/xxgkml/jbxxgk/jgzz/201008/t20100825_54093.html">·黄陂区</option>
<option title="新洲区" value="http://www.whxinzhou.gov.cn/xxgk/xxgkdw/201412/t20141212_25002.shtml">·新洲区</option>
<option title="经开区(汉南区)" value="http://www.wedz.gov.cn/jgsz/index.jhtml">·经开区(汉南区)</option>
<option title="东湖高新区" value="http://www.wehdz.gov.cn/gk/jggk/nsjg/3390.htm">·东湖高新区</option>
<option title="东湖风景区" value=" http://www.whdonghu.gov.cn/e/action/ShowInfo.php?classid﹦24&amp;id﹦434">·东湖风景区</option>
</select> <select name="" onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0" style="cursor: pointer;">
<option>-委属医疗机构-</option>
<option title="市第一医院 " value="http://www.whyyy.com.cn/">·市第一医院 </option>
<option title="市中心医院  " value="http://www.zxhospital.com/">·市中心医院  </option>
<option title="市第三医院 " value="http://www.whsyy.net/">·市第三医院 </option>
<option title="武汉儿童医院 " value="http://www.zgwhfe.com/">·武汉儿童医院 </option>
<option title="市武东医院 " value="http://www.wdyy.com/">·市武东医院 </option>
<option title="市中医医院 " value="http://www.whtcm.com/">·市中医医院 </option>
<option title="市金银潭医院" value="http://www.whjy.com.cn/">·市金银潭医院</option>
<option title="市精神卫生中心 " value="http://www.chinapsy.com/">·市精神卫生中心 </option>
<option title="市武昌医院 " value="http://www.whwcyy.com/">·市武昌医院 </option>
<option title="市普仁医院 " value="http://www.purenyy.com/">·市普仁医院 </option>
<option title="市肺科医院     " value="http://www.whjhb.org/">·市肺科医院     </option>
<option title="市第四医院" value="http://www.puaihospital.net/">·市第四医院</option>
<option title="市东湖医院" value="http://www.whsdhyy.com/">·市东湖医院</option>
</select> <select name="" onchange="if(confirm('该链接为外部链接,是否继续?')){window.open(this.options[this.selectedIndex].value)};this.selectedIndex=0" style="cursor: pointer;">
<option>-委属公卫及社会服务机构-</option>
<option title="市疾控中心  " value="http://www.whcdc.org/">·市疾控中心  </option>
<option title="市卫生计生执法督察总队" value="http://whwjjd.org.cn/index.shtml">·市卫生计生执法督察总队</option>
<option title="市皮防院" value="http://www.whpfs.cn/">·市皮防院</option>
<option title="市职防院" value="http://www.whzfy.org.cn/">·市职防院</option>
<option title="武汉血液中心" value="http://www.whblood.org.cn">·武汉血液中心</option>
<option title="市卫生计生信息中心" value="http://whyks.org.cn/">·市卫生计生信息中心</option>
</select>
</div>
</section>
<div class="middle">
<hgroup class="bottom">
<a href="http://wjw.wuhan.gov.cn:80/front/web/wzlmdt" style="color: white;">网站地图</a> 
			主办:武汉市卫生健康委员会 承办:武汉市卫生健康委员会办公室
			<br/> 地址:武汉市江岸区江汉北路20号 电话:027-12320 邮编:430014
			<br>
<a href="http://www.beian.miit.gov.cn/" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;" target="_blank">鄂ICP备19006884号-2</a>  
			<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=42010202000851" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;" target="_blank">鄂公网安备42010202000851号</a>  政府网站标识码:4201000001
			<br/>您是第 
			<span id="siteCount"></span>19110511 位访问者<br/>
<img height="80" src="http://wjw.wuhan.gov.cn:80/images/index/red_error.png" width="80"/>
<script id="_jiucuo_" sitecode="4201000001" src="http://pucha.kaipuyun.cn/exposure/jiucuo.js"></script>
<div>
<a href="http://www.creditchina.gov.cn/" target="_blank"><img src="http://www.wuhan.gov.cn/newimages/xyzg.png"/></a><a href="http://www.hbcredit.gov.cn/" target="_blank"><img src="http://www.wuhan.gov.cn/newimages/xyhb.png"/></a><a href="https://www.creditwh.gov.cn/" target="_blank"><img src="http://www.wuhan.gov.cn/newimages/xywh.png"/></a>
</div>
</br></hgroup>
<!-- 第三方统计代码 -->
<div hidden="">
<script>
				var _hmt = _hmt || [];
				(function() {
					var hm = document.createElement("script");
					hm.src = "https://hm.baidu.com/hm.js?ac084bfb4d82ed021aed64d30fe62ff0";
					var s = document.getElementsByTagName("script")[0];
					s.parentNode.insertBefore(hm, s);
				})();
			</script>
</div>
<!-- 第三方分享代码 -->
<a class="bshareDiv" href="http://www.bshare.cn/share">分享按钮</a>
<script charset="utf-8" src="http://static.bshare.cn/b/buttonLite.js#uuid=&amp;style=3&amp;fs=4&amp;textcolor=#fff&amp;bgcolor=#06C&amp;text=分享到" type="text/javascript"></script>
<!--<script>
			window._bd_share_config = {
				"common" : {
					"bdSnsKey" : {},
					"bdText" : "",
					"bdMini" : "2",
					"bdMiniList" : false,
					"bdPic" : "",
					"bdStyle" : "0",
					"bdSize" : "16"
				},
				"slide" : {
					"type" : "slide",
					"bdImg" : "2",
					"bdPos" : "right",
					"bdTop" : "100"
				}
			};
			with (document)
				0[(getElementsByTagName('head')[0] || body)
						.appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='
						+ ~(-new Date() / 36e5)];
		</script>-->
<script>
			$('area').click(function() {
				if (this.href.indexOf(document.domain) < 0) {
					return confirm('该链接为外部链接,是否继续?');
				}
			});
		</script>
</div></div></body>
</html>

使用正则表达式(re)提取有用的信息

采集新增数据

In [10]:
import re
content=soup.p.get_text()
In [11]:
content
Out[11]:
'2020年3月4日0-24时,全市新增确诊病例131例,全市新增出院病例1426例,新增死亡病例23例,新增疑似病例61例。'
In [12]:
result=re.findall('(\d+)例',content)
In [13]:
result
Out[13]:
['131', '1426', '23', '61']

采集累计数据

In [14]:
content=soup.p.next_sibling.get_text()
In [15]:
print(content)
截至3月4日24时,全市累计报告确诊病例49671例。其中(大疫情网按行政区统计):江岸区4352例、江汉区7344例、硚口区7305例、汉阳区3605例、武昌区8315例、青山区2985例、洪山区5109例、东西湖区2604例、蔡甸区1993例、江夏区1704例、黄陂区1780例、新洲区1023例、武汉开发区(汉南)1552例。累计治愈出院26316人,累计死亡2305人。全市现有确诊病例21050人(危重894人,重症4448人),现有疑似病例247例。
In [16]:
result=re.findall('(\d+)例',content)
In [17]:
print(result)
['49671', '4352', '7344', '7305', '3605', '8315', '2985', '5109', '2604', '1993', '1704', '1780', '1023', '1552', '247']
In [18]:
result=re.findall('(\d+)人',content)
In [19]:
print(result)
['26316', '2305', '21050', '894', '4448']

发热门诊数据

In [20]:
content=soup.p.next_sibling.next_sibling.get_text()
In [21]:
print(content)
3月3日18时-3月4日18时,全市发热门诊接诊1705人次,较前日减少122人次,其中首诊1062人。3月4日当日,全市核酸检测23136人。
In [22]:
result=re.findall('(\d+)人',content)
In [23]:
print(result)
['1705', '122', '1062', '23136']
In [24]:
result.pop(1)
print(result)
['1705', '1062', '23136']

采集urlList里所有网页的信息

In [25]:
import csv
item=['date','new_confirmed','new_released','new_death','new_suspected','all_confirmed',
      'ja','jh','qk','hy','wc','qs','hs','dxh','cd','jx','hp','xz','hn','suspected',
      'released','death','confirmed','extreme','severe','fever','initial','pcr']
with open('covid-19-wh-daily.csv','w',newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(item)
    for url in urlList:
        # 报告日期
        item=[titleList[urlList.index(url)][12:-1]]
        r=requests.get(url,headers=headers)
        soup=BeautifulSoup(r.text,'html.parser')
        # 新增数据
        content=soup.p.get_text()
        item+=re.findall('(\d+)例',content)
        # 累计数据
        content=soup.p.next_sibling.get_text()
        item+=re.findall('(\d+)例',content)
        item+=re.findall('(\d+)人',content)
        # 门诊接诊数据
        content=soup.p.next_sibling.next_sibling.get_text()
        result=re.findall('(\d+)人',content)
        result.pop(1)
        item+=result
        writer.writerow(item)

问题:如何获得所有“武汉新冠肺炎疫情动态”页面的标题和链接?

手动搜索信息来源(武汉卫健委网站)>> 分析网页特点 >> 自动化爬取有用信息

>>爬取html文件(requests)

>>解析html文件(BeautifulSoup)

>>提取有用信息(BeautifulSoup,re)

>>保存信息(csv)