python网页数据抓取(如何通过网页快速收集表格,达到自动化办公的效果?)
优采云 发布时间: 2021-12-12 19:03python网页数据抓取(如何通过网页快速收集表格,达到自动化办公的效果?)
想必很多工作中的朋友都用表格作为整理器采集了一些资料。发送和接收电子邮件需要时间和精力。大家想通过网络上传的表格有什么好办法采集采集吗?羊毛布?
本文即将介绍一种快捷方式,帮助您通过网页快速采集表单,达到自动化办公的效果,让您更快下班!
通过阅读本文,您将学习以下技能:
(1)使用Python搭建自己的交互式网页
(2)掌握python读表的方法(包括pandas的用法)
(3)使用df.to_sql,一行代码将表单上传到数据库
(4) 2种不同的数据连接方式
(5)sql语句怎么写
本文内容分为3部分:
第 1 部分:网页上传组件
第 2 部分:上传到数据库
第三部分:从数据库中拉取数据,验证是否上传成功
效果图如下:
网页效果图
想知道它是如何实现的吗?慢慢听我说
为了实现以上效果图,我们需要安装几个python库
pip install streamlit #构建web网页的基础模块
pip install pandas #读取表格的模块1
pip install xlrd #读取表格的模块2
pip install streamlit-aggrid #在网页中显示表格的模块
pip install pymysql #连接数据库的模块1
pip install sqlalchemy #连接数据库的模块2
在国内如何加快下载模块的速度?
首先打开cmd窗口,复制以下代码回车运行,然后依次执行上面的安装命令
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
本文章介绍的完整代码已经在python3.8.3环境中验证过,可以直接复制使用
程序运行方法:将以下代码保存为:test.py,然后在对应目录打开cmd窗口,输入magic命令:streamlit run test.py,然后输入回车,遇到输入邮箱部分时,只需输入一个地址。是的,然后浏览器会自动打开运行并显示界面的上传部分
# -*- coding: utf-8 -*-
import streamlit as st
from st_aggrid import AgGrid
import pandas as pd
import pymysql
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:abcde@localhost/python?charset=utf8')
uploaded_file = st.file_uploader("请选择要上传的xls格式表格!")
if uploaded_file is not None:
df1 = pd.read_excel(uploaded_file)
AgGrid(df1)
df1.to_sql(name=str(uploaded_file.name).replace(".xls",""), con=engine, chunksize=1000, if_exists='replace', index=None)
st.success("上传成功!")
db = pymysql.connect(host="localhost", user="root", password="abcde", database="python", charset="utf8")
sql="select * from "+str(uploaded_file.name).replace(".xls","")
cursor = db.cursor()
cursor.execute(sql)
db.commit()
df2=pd.read_sql(sql,con=db)
st.success("数据库中的表格内容如下")
st.dataframe(df2)
else:
st.warning("请上传xls表格!")
以下是代码说明部分:
1.engine = create_engine('mysql+pymysql://root:abcde@localhost/python?charset=utf8')
这句话的作用是搭建一个数据库连接引擎,root是数据库用户名,abcde是数据库密码,localhost是数据库地址,如果有固定IP,请用固定IP替换localhost,python是数据库名称,charset=utf8 表示设置 数据库必须支持中文显示
2.uploaded_file = st.file_uploader("请选择要上传的xls格式表!")
这是表单的上传组件,见效果页最上方,标准写法,双引号里面的内容可以改
3. 整个程序是在if---else框架中编写的。当页面检测到用户没有上传表单时,页面底部会显示*敏*感*词*警告,提醒用户需要上传表单。对应代码:st.warning("请上传xls表单!")
4. 数据表上传到页面的显示部分,使用from st_aggrid import AgGrid语句引入的AgGrid。这个模块可以很方便的将dataframe数据用1行代码转换成表格并显示在网页上
对应程序中的代码为:
df1 = pd.read_excel(uploaded_file)
AgGrid(df1)
5.如何将pandas读取的dataframe数据上传到指定的python数据库?
使用这段代码:
df1.to_sql(name=str(uploaded_file.name).replace(".xls",""), con=engine, chunksize=1000, if_exists='replace', index=None)
name字段指定上传到数据库后对应表的名称,str(uploaded_file.name).replace(".xls","")可以自动获取用户上传的表名,使用字符串替换去除文件后缀的方法,即使用表名作为数据库中的表名
con 指定数据库连接引擎
if_exists 决定上传方式,这里是replace方法,也就是替换方法。表单上传后,如果数据库中存在相同的内容,则进行替换操作;如果您需要向原创表单添加写入,您可以添加替换替换为附加
6.如何验证表单中的数据是否已经成功上传到数据库?
我们用下面的代码来验证
db = pymysql.connect(host="localhost", user="root", password="abcde", database="python", charset="utf8")
sql="select * from "+str(uploaded_file.name).replace(".xls","")
cursor = db.cursor()
cursor.execute(sql)
db.commit()
df2=pd.read_sql(sql,con=db)
st.success("数据库中的表格内容如下")
st.dataframe(df2)
其中db是pymysql模块的数据库连接引擎
sql是标准的sql语句,意思是从上传的表中读取所有数据
游标 = db.cursor()
游标.执行(sql)
mit()
这3句话的作用就是把sql提交给数据执行
df2=pd.read_sql(sql,con=db)的作用是把读取的内容变成dataframe
st.dataframe(df2)的作用是在网页上显示dataframe
本文使用的数据库是 Mariadb。如何搭建自己的Mariadb数据库,请看作者下面的视频
如果想深入了解数据库或者Mysql相关内容,可以购买以下推荐书籍进行学习
如果您有什么不明白的或者更好的想法,欢迎在下方评论区与我互动,谢谢!