python每天自动爬取所需新冠肺炎疫情数据并发送到邮箱(无需selenium)

本文介绍了一个Python爬虫项目,该项目能够每天定时爬取丁香园网站的疫情数据,针对湖北武汉、海南海口、江苏南京三个地区,然后利用邮件将数据发送至指定邮箱,实现疫情信息的自动更新。
摘要由CSDN通过智能技术生成

python每天自动爬取所需新冠肺炎疫情数据并发送到邮箱

一、前言

这个寒假真是又长又无聊,我大概有两个星期没出门了。为了给自己找点事做,这两天弄了个爬虫玩玩,有不严谨的地方望大家指教。

二、项目简介

这次项目主要是想做一个爬虫,可以每天早上定时爬取当天的疫情数据,然后把数据发到我的邮箱里,让自己可以一大早醒来就实时了解到最新情况。为了简单起见,我只爬取湖北武汉,海南海口,江苏南京三个省市,一个是疫情主要战场,一个是我目前居住地,一个是我学校所在地。当然原理都是一样的,大家想爬取别的地方也可以。

三、原理

整个项目分成三个部分,第一部分是爬虫部分,第二部分是邮件部分,第三部分是云服务器部分,接下来我会一一介绍。

1、爬虫

这里我用到的库如下:

import urllib
from bs4 import BeautifulSoup
import json

urllib是用来获取网站源码的,bs4是用来解析html标签的,解析完后得到的是字符串,所以又用了json来转化成列表。

数据源我选用的是丁香园的,网站上相关数据显示的是这样:
在这里插入图片描述
我们来看看源码中的相关部分:

在这里插入图片描述
可以看到各个地区的数据被放在了id为“getAreaStat”的script标签里,通过findAll方法可以很容易定位到。

html = urllib.urlopen("https://ncov.dxy.cn/ncovh5/view/pneumonia?scene=2&clicktime=1579582238&enterid=1579582238&from=singlemessage&isappinstalled=0")
soup = BeautifulSoup(html.read())

block = soup.findAll("script",{
   "id":"getAreaStat"})
block0 = block[0]
blo_text = block0.get_text()
goal_text = blo_text[27:-11]

这里返回的block是bs4.element.ResultSet类型的,block0是bs4.element.Tag类型的,我们需要的是第二个(这里我对bs4的学习也还不够深入没法讲的太仔细)。然后再提取它的text部分即得到了一列字符串,这个字符串里是我们要的对于每一个省份数据的列表,但是头尾有一些我们不要的字符串,要把它掐掉,就可以得到goal_text。

然后用json将这个字符串转化成列表类型。

goal_list = json.loads(goal_text)

这个列表有34个元素,对应34个省直辖市特别行政区,每一个元素又是一个字典,包括某个省的名称、确诊人数、市等等,市的索引值又是一个列表,对应不同市,列表里面又是一个字典…

总之,理清它的数据结构我们就能通过遍历找到我们想要的省市数据。

for i in range(len(goal_list)):#这里用的是中文的unicode编码
    if(goal_list[i]['provinceShortName']==u'\u6e56\u5317'):
        hubei_num = i #湖北
    if(goal_list[i]['provinceShortName']==u'\u6d77\u5357'):
        hainan_num = i #海南
    if(goal_list[i]['provinceShortName']==u'\u6c5f\u82cf'):
        jiangsu_num = i #江苏

#三个省的确诊人数
hubei_confirmedCount = goal_list[hubei_num]['confirmedCount']
hainan_confirmedCount = goal_list[hainan_num]['confirmedCount']
jiangsu_confirmedCount = goal_list[jiangsu_num]['confirmedCount']

#武汉
for i in 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值