Python—轻松获取HTML网页内的表格内容并写入数据库

前面说过,使用selenium可以轻松获取网页内的表格内容,但是selenium需要安装浏览器和下载对应的webdriver,不是很方便。我探索出了一个更便利的方式,那就是Python内置的html模块。因为是内置模块,不需要额外做什么。

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
  def __init__(self):
    HTMLParser.__init__(self)
    self.in_td = False
    self.in_th = False
    self.data = []      #所有数据
    self.line = []      #行数据
    self.header=[]      #标题列表

  def handle_starttag(self, tag, attrs):
    if tag=='th':self.in_th = True
    else:self.in_th = False
    if tag=='td':self.in_td = True
    else:self.in_td = False
    if tag=='tr':self.line=[]        #开始存储一行的数据

  def handle_endtag(self, tag):
    if tag=='td':self.in_td=False
    if tag=='th':self.in_th=False
    if tag=='tr' and self.line:      #收行尾
      self.data.append(self.line)    #行数据打包

  def handle_data(self, data):
    data=data.strip()
    if self.in_th==True:      #标题
      self.header.append(data)
    if self.in_td==True:      #表格
      self.line.append(data)
     
if __name__=='__main__':
  with open("target.html","r",encoding="utf-8") as f: #读取html文件
    cnt=f.read()
  parser = MyHTMLParser()
  parser.feed(cnt)                                    #填入文件分析
  data=parser.data                                    #表格内容
  header=parser.header                                #表格标题
  import pandas as pd
  df=pd.DataFrame(parser.data,columns=parser.header)
  #导出为Excel
  df.to_excel('dump.xlsx',index=False)	
  #或者导出到MySQL
  from sqlalchemy import create_engine
  conn=create_engine("mysql+pymysql://use:pass@127.0.0.1:3306/tbname")
  df.to_sql(name='temp',con=conn,if_exists='replace',index=False)	

这里target.html就是下载到的html文件,如果直接从网页获取,就这样

import requests
res=requests.get(url)
res.encoding='utf-8'   #防止乱码
cnt=res.text

前端部分: 1.使用vue框架编写前端页面,包括上传控件和表格展示区域。 2.使用axios库将文件上传到后端服务器: ```javascript methods: { /* 上传Excel文件 */ handleUpload (file) { let formData = new FormData() formData.append('file', file) axios.post('/upload/excel', formData) .then(res => { /* 处理返回的数据,例如将表格数据展示在页面上 */ }).catch(err => { console.error(err) }) }, } ``` 3.在页面上展示表格数据: ```javascript data () { return { tableData: [] // 表格数据数组 } }, methods: { /* 处理上传Excel文件返回的表格数据 */ handleTableData (data) { /* 将data解析成表格数据数组,例如: for (let i = 0; i < data.length; i++) { this.tableData.push({ id: data[i].id, name: data[i].name, ... }) } */ }, }, ``` 4.将表格数据展示在页面的table组件: ```html <el-table :data="tableData"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> ... </el-table> ``` 后端部分: 1.使用django框架编写后端接口,包括文件上传接口和表格数据查询接口。 2.使用pandas库处理Excel文件,并将数据写入数据库: ```python import pandas as pd from .models import TableModel def upload_excel(request): file = request.FILES['file'] data = pd.read_excel(file) # 将数据写入数据库 for index, row in data.iterrows(): TableModel.objects.update_or_create( id=row['id'], defaults={ 'name': row['name'], ... } ) return HttpResponse('success') ``` 3.查询数据库并返回表格数据: ```python from .models import TableModel def get_table_data(request): data = [] for row in TableModel.objects.all(): data.append({ 'id': row.id, 'name': row.name, ... }) return JsonResponse(data, safe=False) ``` 4.配置路由,使前后端能够通过接口进行通信: ```python from django.conf.urls.static import static from django.conf import settings from django.urls import path from . import views urlpatterns = [ path('upload/excel', views.upload_excel), path('get/table', views.get_table_data), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 需要注意的是,在上传Excel文件的时候,需要在django的settings文件设置MEDIA_ROOT和MEDIA_URL。在前端页面表格数据展示组件,需要填写表格数据的属性名和标签名,以及请求接口的地址和方法等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值