python网页数据抓取(如何通过网页快速收集表格,达到自动化办公的效果?)

优采云 发布时间: 2021-12-12 19:03

  python网页数据抓取(如何通过网页快速收集表格,达到自动化办公的效果?)

  想必很多工作中的朋友都用表格作为整理器采集了一些资料。发送和接收电子邮件需要时间和精力。大家想通过网络上传的表格有什么好办法采集采集吗?羊毛布?

  本文即将介绍一种快捷方式,帮助您通过网页快速采集表单,达到自动化办公的效果,让您更快下班!

  通过阅读本文,您将学习以下技能:

  (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相关内容,可以购买以下推荐书籍进行学习

  如果您有什么不明白的或者更好的想法,欢迎在下方评论区与我互动,谢谢!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线