用正则爬取新型肺炎疫情情况

最近新型肺炎闹得很厉害,于是我就自己写了一个爬虫,爬取最新疫情的情况。

什么是爬虫?

爬虫也就是网络蜘蛛,是一种按照一定的规则,自动爬取万维网的信息的程序或者脚本。

它是怎么工作的?

其实就是通过脚本,向服务器发起访问请求,然后得到服务器返回的结果后,就会返回内容。如果还不明白的话,可以看一下小品:

用户:爬虫,去给我爬取网站上的内容!

爬虫:好的。

(爬虫找到服务器)

爬虫:我能获取你们网页上的内容吗?

服务器:好的,请稍后。

(爬虫得到了用户需要的内容)

爬虫:用户,我爬取到了内容。

用户:干得好!

当然这是在服务器没有使用反爬措施的情况下。如果服务器使用了反爬措施的话,就会出现以下情况:

爬虫:我能获取你们网页上的内容吗?

服务器:滚!

这时就要使用请求头(也就是使用user-agent),让服务器以为是浏览器要获取内容,而不是爬虫,就放行了。

接下来是操作时间

咱们回到正题上,如果要爬取网页上的内容,我们要用到的包如下:

urllib

re

爬取的地址如下:

http://m.medsci.cn/wh.asp

当然你其他网站可以(最好是实时更新的)

接下来,上代码!

# 上次网易那个爬取数据过旧,这次换了个梅斯的页面
# 导入模块
from urllib import request
import re

# 别忘了请求头(headers),以防万一
user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0"
headers = {"User-Agent": user_agent}
# 爬取网站地址
req = request.Request("http://m.medsci.cn/wh.asp",headers=headers)
resp = request.urlopen(req)
# 读取页面
html = resp.read()
headline = re.findall(r'<tr style="border: 1px solid black;font-weight:bold;">.*</tr>',html.decode('utf-8'))
result = re.findall(r'<tr style="border-left:1px solid #F00;border-top:1px solid black">.*</tr>',html.decode('utf-8'))
time = re.findall(r'<p class="head-time">.*</p>',html.decode('utf-8'))
total = re.findall(r'<p class="head-title">.*</p>',html.decode('utf-8'))
# 进行数据清洗
headline = str(headline)
headline = headline.replace('''['<tr style="border: 1px solid black;font-weight:bold;"><td style="border: 1px solid black;">''',"")
headline = headline.replace('''</td><td style="border: 1px solid black;">''',"              ")
headline = headline.replace('''</td></tr>']''',"")
total = str(total)
total = total.replace('''['<p class="head-title">''','')
total = total.replace('''</p>']''','')
result = str(result)
result = result.replace('''['<tr style="border-left:1px solid #F00;border-top:1px solid black"><td style="border: 1px solid black;">''',"")
result = result.replace('''</td><td style="border: 1px solid black;">''',"              ")
result = result.replace(''''<tr style="border-left:1px solid #F00;border-top:1px solid black"><td style="border: 1px solid black;">''',"")
result = result.replace("</td></tr>'","")
result = result.replace('<td style="border: 1px solid black;"></td>',"0")
result = result.replace(', ',"\n")
result = result.replace(']',"")
time = str(time)
time = time.replace('''['<p class="head-time">''',"")
time = time.replace('''</p>']''',"")
# 输出结果
print("=================================================================")
print(total)
print(headline)
print(result)
print(time)

终端输出结果如下:

=================================================================
全部:确诊 11904 例 密切接触  131881 例 疑似  16192  例 治愈 206 例 死亡 257 例
地区              确诊              密切接触              疑似              治愈              死亡
湖北              7153              36838                            119              249
浙江              599              10023                            15              
广东              520              1965                            11              
河南              422              6238              751              3              2
湖南              389              6960                            3              
安徽              297              4997                            3              
江西              286              7548                            9              
重庆              238              4789              13              2              
四川              207              4425                            3              1
山东              202              5614              72              2              
江苏              202              3084                            5              
上海              153              9804              167              9              1
福建              144              2501              116                            
北京              139              115                            5              1
广西              100              2700              11              2              
河北              96              2045              88                            1
云南              91              2642              228              1              
陕西              87              1979              116                            
黑龙江              80              1106              181                            1
辽宁              60              671                            1              
海南              57              827                            1              1
山西              47              1101              75              1              
天津              37              201              154                            
甘肃              35              556                                          
贵州              29              416              3              2              
宁夏              26              792              1                            
内蒙古              20              396              2                            
新疆              18              902                                          
吉林              17              831              10              1              
香港              12                            300                            
台湾              10                                                        
青海              9              135                                          
澳门              7                                                        
西藏              1                                                        
印度              1                                                        
墨西哥              0                            7                            
菲律宾              0                            4                            
巴西              0                            1                            
沙特              0                                                        
泰国              19                                          5              
日本              15                                          1              
新加坡              13                                                        
韩国              12                                                        
澳大利亚              9                                          2              
马来西亚              8                                                        
美国              6                                                        
德国              5                                                        
法国              5                                                        
阿联酋              4                                                        
加拿大              3                                                        
越南              2                                                        
英国              2                                                        
俄罗斯              2                                                        
意大利              2                                                        
尼泊尔              1                                                        
柬埔寨              1                                                        
斯里兰卡              1                                                        
芬兰              1                                                        
西班牙              1                                                        
瑞典              1                                                        
厄瓜多尔              0                            1                            
哥伦比亚              0                            1                            
截至 2020-2-1 14:33:04 数据统计

 

请程序员朋友们尽量避免前往人多的地方,出门戴好口罩。

最后希望各位程序员朋友们能够注意安全!

武汉加油!

中国加油!

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值