基于公共卫生事件背景下的数据采集

简介: 通过Python爬取中国某省份新冠肺炎疫情数据,存入关系型数据库,对此数据分析并进行可视化,制作查询中国某省份疫情情况的GUI界面。

系统实现流程如下
此次项目数据采集部分使用的Python库有:requests,xlwt,json,matplotlib,tkinter,os,re,time
import datetime
import time
import socket
import pymysql
import re
import urllib.parse
from urllib import error
from bs4 import BeautifulSoup # 导入urllib库的request模块
import lxml # 文档解析器
import os # os模块就是对操作系统进行操作
import numpy as np # 列表、字典、字符串等中计算元素重复的次数

数据爬取:
def get_html_text(index_url,page_url):

for i in range(1,80):
    url = index_url + str(i) + '&showtj=&showhot=&author=&key=&code='
    response = urllib.request.Request(url, headers=headers)
    try:
        res = urllib.request.urlopen(response)  # 调用urlopen()从服务器获取网页响应(respone),其返回的响应是一个实例
        html = res.read().decode('utf-8')  # 调用返回响应示例中的read(),可以读取html
        soup = BeautifulSoup(html, 'lxml')
        result = soup.find_all('ul', class_="cpquery")  # 和上面的不同,这里要闻在'ul,class = news-txtd'中,所以要修改一下。
        download_soup = BeautifulSoup(str(result), 'lxml')
        url_all = download_soup.find_all('a')
        hours=download_soup.find_all('span', class_="newslist-time")
        hours = re.findall('\d{4}-\d{1,2}-\d{1,2}', str(result))
        for a_url in url_all:
            a_title = a_url.get_text()
            titles.append(a_title)
            a_url = a_url.get('href')
            a_url = urllib.parse.urljoin(page_url, a_url)
            urls.append(a_url)
        for hour in hours:
            hour = datetime.datetime.strptime(hour, '%Y-%m-%d')
            times.append(hour)
            # time.sleep(2)  # 暂停下载页面2秒
            # socket.setdefaulttimeout(15)  # 控制现在内容的时间
    except urllib.error.URLError as e:
        if hasattr(e, 'reason'):
            print("连接失败!", e.reason)
    for i in range(len(urls)):
        try:
            data = urllib.request.Request(urls[i], headers=headers)
            res = urllib.request.urlopen(data)
            page_info = res.read().decode('utf-8')
            soup = BeautifulSoup(page_info, 'lxml')
            text = ""
            now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            for p in soup.select('p'):
                text += p.get_text()
                text += "\n"
            txt(urls[i], titles[i], text, times[i], now)
            print(i)
            print("success!")
        except OSError:
            print("解析错误!")
            pass  # 如果报错就不管,继续读取下一个url
        continue
# else:
#     url = 'http://wjw.liaocheng.gov.cn/xwzx_12609/gzdt/index.html'
#     response = urllib.request.Request(url, headers=headers)
#     try:
#         res = urllib.request.urlopen(response)  # 调用urlopen()从服务器获取网页响应(respone),其返回的响应是一个实例
#         html = res.read().decode('utf-8')  # 调用返回响应示例中的read(),可以读取html
#         soup = BeautifulSoup(html, 'lxml')
#         result = soup.find_all('ul', class_='news-list news-list9')  # 和上面的不同,这里要闻在'ul,class = news-txtd'中,所以要修改一下。
#         download_soup = BeautifulSoup(str(result), 'lxml')
#         url_all = download_soup.find_all('a')
#         hours = re.findall('\d{4}-\d{1,2}-\d{1,2}', str(result))
#         for a_url in url_all:
#             a_title = a_url.get_text()
#             titles.append(a_title)
#             a_url = a_url.get('href')
#             a_url = urllib.parse.urljoin(page_url, a_url)
#             urls.append(a_url)
#         for hour in hours:
#             hour = datetime.datetime.strptime(hour, '%Y-%m-%d')
#             times.append(hour)
#             # time.sleep(2)  # 暂停下载页面2秒
#             # socket.setdefaulttimeout(15)  # 控制现在内容的时间
#     except urllib.error.URLError as e:
#         if hasattr(e, 'reason'):
#             print("连接失败!", e.reason)

删除数据库

def delete_data():

# 连接数据库
db = pymysql.connect(
    host='XXXX.XXXX.XXXX.XXXX',  # 数据库地址
    port=3306,  # 数据库端口号
    user='XXXX',  # 数据库账号
    password='XXXXXXXXXX',  # 数据库密码
    db='python',
    use_unicode=True,
    charset="utf8")  # 数据库表名
# 创建数据库对象
conn = db.cursor()
try:
    conn.execute("DELETE from filedata_bak where city='滨州市(新闻)' and datakinds=0")
    db.commit()
except Exception as e:
    print(e)
    db.rollback()

保存数据到数据库

def txt(urls,title, content, hour,now): # 定义函数名

# 连接数据库
db = pymysql.connect(
    host='XXXX.XXXX.XXXX.XXXX',  # 数据库地址
    port=3306,  # 数据库端口号
    user='XXXX',  # 数据库账号
    password='XXXXXXXXXX',  # 数据库密码
    db='python',
    use_unicode=True,
    charset="utf8")  # 数据库表名
# 创建数据库对象
conn = db.cursor()
try:
    # 执行sql语句,插入数据

    conn.execute(
        "insert ignore into filedata_bak(websitename,datalink,title,content,datatype,city,province,datakinds,pubdate,createtime) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (
        "滨州市卫生健康委员会", urls, title, content, "文本", "滨州市(新闻)", "山东省", 0, hour, now))

    # 提交到数据库执行
    db.commit()
    print('恭喜您,导入数据成功!')
except:
    # 发生错误时回滚
    db.rollback()
    print('sorry,导入数据失败!')
db.commit()  # 关闭数据库连接
conn.close()  # 关闭指针对象
db.close()  # 关闭连接对象

def main():

page_url = 'http://wjw.binzhou.gov.cn/'
index_url = 'http://wjw.binzhou.gov.cn/xinwen/class/?2.html&page='
get_html_text(index_url, page_url)

if name == '__main__':

delete_data()
headers = {
    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
urls = []
times = []
titles = []
main()
目录
相关文章
|
9月前
|
传感器 数据采集 数据处理
振弦采集仪的操作方法及数据处理技术的一般步骤
振弦采集仪的操作方法及数据处理技术的一般步骤
振弦采集仪的操作方法及数据处理技术的一般步骤
|
3月前
|
数据采集 传感器 监控
MES系统的实时数据采集和监控功能具体如何实现?
MES系统(制造执行系统)通过与PLC、SCADA系统集成,加装传感器和使用物联网技术,结合条码与RFID技术、图像识别、云计算等手段,实现生产过程的全面实时数据采集和监控,确保数据的实时性和准确性,支持生产优化和决策。
139 6
|
4月前
|
数据挖掘 UED
功能发布-事件分析之漏斗分析
漏斗分析是基于事件的一种分析模型。 漏斗分析主要是对一个多步骤的场景进行的每一步的转化数据分析。可以理解为是从顶部(广泛数据)到底部(目标数据)逐步筛选和转化分析的过程。
功能发布-事件分析之漏斗分析
|
7月前
|
监控 开发者
监控治理问题之想通过多维度触发条件来进行降噪如何解决
监控治理问题之想通过多维度触发条件来进行降噪如何解决
|
9月前
|
Prometheus 监控 关系型数据库
监控数据的几种采集方式
【1月更文挑战第14天】
|
数据采集 小程序 前端开发
IoT小程序在展示中央空调采集数据和实时运行状态上的应用
IoT小程序框架在跨系统平台(AliOS Things、Ubuntu、Linux、MacOS、Window等)方面提供了非常优秀的基础能力,应用的更新升级提供了多种方式,在实际业务开发过程中可以灵活选择。IoT小程序框架通过JSAPI提供了调用系统底层应用的能力,同时提供了自定义JSAPI扩展封装的方法,这样就足够业务开发通过自定义的方式满足特殊的业务需求。 IoT小程序在前端框架能力、应用框架能力、图形框架能力都进行了适配和优化。那么接下来,我们按照其官方步骤搭建开发环境,然后结合中央空调数据采集和状态显示的实际应用场景开发物联网小程序应用。
23955 63
IoT小程序在展示中央空调采集数据和实时运行状态上的应用
|
传感器 编解码
开发振弦采集模块的注意事项
振弦采集模块是一种常见的传感器模块,它可以测量物体的振动情况以及振动频率等参数。在很多领域中都有广泛的应用,比如机械制造、地震监测、汽车安全等。因此,开发振弦采集模块是非常重要的工作。
开发振弦采集模块的注意事项
|
定位技术
百度地图开发系列(4):使用采集到的GPS点实现轨迹的解决方案
百度地图开发系列(4):使用采集到的GPS点实现轨迹的解决方案
157 0
|
传感器
振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
指令生成器可根据需要生成符合 MODBUS 和 AABB 通讯协议的读取和控制指令。 通过点击串口调试工具内的【 指令生成器】 按钮,可打开指令生成器窗口,如下图示。 在指令生成器窗口中, 输入需要修改或读取的寄存器地址、寄存器值,点击【 生成指令】 按钮,即可在界面底部的文本框生成 16 进制指令, 点击【 复制到剪切板】 按钮可将当前显示的指令内容复制到剪切板。
振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
|
安全 前端开发 数据挖掘
不良事件上报系统源码,多维度多样式的统计分析图表
商业级源码。不良事件上报系统是医疗机构自愿报告医疗安全不良事件的信息平台,具有非具名、非惩罚性质。管理员可通过对上报信息的研究分析,向医疗机构提出医疗安全警示和改进建议,以增强医院识别、处理安全隐患和预防不良事件发生的能力,从而实现安全医疗的目标。
190 0
不良事件上报系统源码,多维度多样式的统计分析图表