python——BeautifulSoup的使用

python——BeautifulSoup pyecharts 的使用

 -------------------------------------------
 利用python爬取四川省卫计委每日的疫情通报,建立自己的分析数据。

四川省卫计委网站:http://wsjkw.sc.gov.cn/scwsjkw/gzbd01/ztwzlmgl.shtml

1、网站爬取无法直接爬取,需要导入cookies和headers才可以正常爬取。

导入所需模块:

import requests
from bs4 import BeautifulSoup
import re

导入分析头

cookies = {
    'yfx_c_g_u_id_10000063': '_ck20012014505914081360317906303',
    'yfx_f_l_v_t_10000063': 'f_t_1579503059397__r_t_1579503059397__v_t_1579503059397__r_c_0',
    'yfx_c_g_u_id_10003065': '_ck20022713490417743557313617550',
    'yfx_f_l_v_t_10003065': 'f_t_1582782544759__r_t_1582782544759__v_t_1582782544759__r_c_0',
    '__SDID': '71d879b04277f8a8',
}

headers = {
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'Upgrade-Insecure-Requests': '1',
    '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',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Referer': 'http://wsjkw.sc.gov.ex2.cdwjw.ipv6.chengdu.gov.cn/scwsjkw/gzbd01/ztwzlmgl_3.shtml',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

response = requests.get('http://wsjkw.sc.gov.cn/scwsjkw/gzbd01/ztwzlmgl.shtml', headers=headers, cookies=cookies, verify=False)
response.encoding="utf-8"
#print(response.text)

2、爬取疫情时间、疫情标题和每日疫情url

yq_time=[]   #分别保存为数组
yq_url=[]
yq_title=[]
def day_html(url):
    response=requests.get(url, headers=headers, cookies=cookies, verify=False)
    #print(response.text)
    response.encoding='utf-8'
    soup=BeautifulSoup(response.text,'html.parser')
    day_htmls=soup.findAll(attrs={"contMain fontSt"})  #通过某一个class类定位目的标签
    day_htmls=day_htmls[0].select('li') #再通过抓取到的标签来准确定位所需的标签
    for i in day_htmls:
       #print(i)
       yq_time.append(i.span.text)  # 分别将每日数据加入到数组中
       yq_url.append(i.a['href'])
       yq_title.append(i.a.text)
       
    
url="http://wsjkw.sc.gov.cn/scwsjkw/gzbd01/ztwzlmgl.shtml"  #第一页的网址不同,需要单独爬取
day_html(url)

for i in range(2,4):  #爬取第2页和第3页数据
    url="http://wsjkw.sc.gov.cn/scwsjkw/gzbd01/ztwzlmgl_"+str(i)+".shtml"
    day_html(url)
print(yq_time,yq_url,yq_title)

在这里插入图片描述

3 通过每日疫情url抓取每日通报内容。

yq_content=[]   #建立空的每日通报数组
def day_content(url):
    response = requests.get(url, headers=headers, cookies=cookies, verify=False)
    response.encoding="utf-8"
    #print(response.text)
    soup=BeautifulSoup(response.text,'html.parser')
    temp=(soup.findAll(attrs={'wy_contMain fontSt'}))[0]  #通过class来定位
    yq_content.append(temp.text)  #直接抓取class类中所有的文字内容
    #print(temp.text)
for each in yq_url:
    url='http://wsjkw.sc.gov.cn/'+each
    day_content(url)
#print(yq_content)

4、通过每日通报的内容,来抓取数据。

print("发布时间","新增疑似","新增确诊","新增出院","成都新增确诊")
for i in range(len(yq_content)):
    
        yq_xzys=re.findall(r'新增疑似病例(\d+)例',yq_content[i])
        if yq_xzys==[]:
            yq_xzys=0
        else:
            yq_xzys=yq_xzys[0]
        yq_xzqz=re.findall(r'新增确诊病例(\d+)例',yq_content[i])
        if yq_xzqz==[]:
            yq_xzqz=0
        else:
            yq_xzqz=yq_xzqz[0]
        yq_xzcy=re.findall(r'新增治愈出院病例(\d+)例',yq_content[i])
        if yq_xzcy==[]:
            yq_xzcy=0
        else:
            yq_xzcy=yq_xzcy[0]
        yq_cdxzqz=re.findall(r'成都市(\d+)例',yq_content[i])
        if yq_cdxzqz==[]:
            yq_cdxzqz=0
        else:
            yq_cdxzqz=yq_cdxzqz[0]
        print(yq_time[i],yq_xzys,yq_xzqz,yq_xzcy,yq_cdxzqz)

在这里插入图片描述

5 为了便于数据分析,重新定义下每日疫情的数据。

print("发布时间","新增疑似","新增确诊","新增出院","成都新增确诊")
yq_xzys=[]  #定义疫情新增疑似数组
yq_xzqz=[]  #定义疫情新增确诊数组
yq_xzcy=[]   #定义疫情新增出院数组
yq_cdxzqz=[]  #定义疫情成都确认数组
for i in range(len(yq_content)):
    
        dyq_xzys=re.findall(r'新增疑似病例(\d+)例',yq_content[i])
        if dyq_xzys==[]:
            dyq_xzys=0
        else:
            dyq_xzys=dyq_xzys[0]
        yq_xzys.append(int(dyq_xzys))
        dyq_xzqz=re.findall(r'新增确诊病例(\d+)例',yq_content[i])
        if dyq_xzqz==[]:
            dyq_xzqz=0
        else:
            dyq_xzqz=dyq_xzqz[0]
        yq_xzqz.append(int(dyq_xzqz))
        
        dyq_xzcy=re.findall(r'新增治愈出院病例(\d+)例',yq_content[i])
        if dyq_xzcy==[]:
            ddyq_xzcy=0
        else:
            dyq_xzcy=dyq_xzcy[0]
            
        yq_xzcy.append(dyq_xzcy)
        
        dyq_cdxzqz=re.findall(r'成都市(\d+)例',yq_content[i])
        if dyq_cdxzqz==[]:
            dyq_cdxzqz=0
        else:
            dyq_cdxzqz=dyq_cdxzqz[0]
        
        yq_cdxzqz.append(int(dyq_cdxzqz))
print(yq_time,yq_xzys,yq_xzqz,yq_xzcy,yq_cdxzqz)

在这里插入图片描述

6 利用pyecharts 进行绘图分析

绘制四川省新增疑似和新增确诊曲线图,注意jupyternotebook 对于新版pyecharts的书写格式。

from pyecharts.charts import Line
from pyecharts import options as opts

line = (
    Line()
    .add_xaxis(yq_time[::-1])  #数组倒序
    .add_yaxis("新增疑似", yq_xzys[::-1],is_smooth=True)
    .add_yaxis("新增确诊",yq_xzqz[::-1],is_smooth=True)
    .set_global_opts(title_opts=opts.TitleOpts(title="四川省疫情变化表"), # 定义标题
                     datazoom_opts=opts.DataZoomOpts(is_show=True)) #定义横坐标缩放
        )
line.render_notebook()

在这里插入图片描述
可见疑似和确诊已经越来越少了,加油!
绘制成都市新增变化曲线

from pyecharts.charts import Line
from pyecharts import options as opts

line = (
    Line()
    .add_xaxis(yq_time[::-1])  #数组倒序
    .add_yaxis("成都新增确诊", yq_cdxzqz[::-1],is_smooth=True)
    .set_global_opts(title_opts=opts.TitleOpts(title="成都新增确诊变化表"), # 定义标题
                     datazoom_opts=opts.DataZoomOpts(is_show=True),
                     toolbox_opts=opts.ToolboxOpts(is_show=True)) #定义横坐标缩放
        )
line.render_notebook()

在这里插入图片描述
可见,成都市已经有8天连续确诊为零了,胜利在望,武汉加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值