首页 > 数据库 >python3.6 解析svg保存到mysql

python3.6 解析svg保存到mysql

时间:2024-10-14 16:01:49浏览次数:1  
标签:title svg list poster python3.6 mysql print btn data

 

  1 import json
  2 from collections import Counter
  3 from json import JSONDecodeError
  4 
  5 import mysql
  6 import requests
  7 from lxml import etree
  8 
  9 # 定义远程 SVG 文件的 URL
 10 file = r'D:\tmp_files\jmx\0919_3568.txt'
 11 data_to_insert=[]
 12 with open(file, 'r', encoding='utf-8') as file:
 13     # 逐行读取文件
 14     for line in file:
 15         try:
 16             # print(line.strip())  # 使用 strip() 去掉每行末尾的换行符
 17             url = line.strip()
 18             response = requests.get(url)
 19             start_index = url.rfind('/') + 1  # 从最后一个 '/' 开始
 20             end_index = url.find('_', start_index)  # 找到第一个 '_'
 21             # 提取子字符串
 22             pos_id = url[start_index:end_index]
 23             print("pos_id===", pos_id)
 24             # 发送 HTTP GET 请求获取 SVG 文件内容
 25             response = requests.get(url)
 26             # 打印响应内容(XML 格式)
 27 
 28             svg_content = response.content  # 使用 .content 获取字节类型的内容
 29             # print(svg_content)
 30             # print(svg_content.decode('utf-8'))  # 打印内容
 31             # 将字节类型的 SVG 内容解析为 XML 解析树
 32             root = etree.fromstring(svg_content)
 33             # print(svg_content)
 34             # print(root.xpath('//@class'))
 35             class_items = root.xpath('//@class')
 36             dataTitle_items = root.xpath('//@data-title')
 37             dictx = {}
 38             counter = Counter(class_items)
 39             store_btn_info = {}
 40             for obj, count in counter.items():
 41                 # print(f"{obj}: {count}; ")
 42                 store_btn_info[obj] = count
 43             btn_table = store_btn_info.get("btn_table")
 44             btn_poster = store_btn_info.get("btn_poster")
 45             btn_mainEntry = store_btn_info.get("btn_mainEntry")
 46             # print(btn_table,btn_poster,btn_mainEntry)
 47             btn_poster_elements = root.xpath("//*[@class='btn_poster']")
 48             btn_table_elements = root.xpath("//*[@class='btn_table']")
 49             btn_mainEntry_elements = root.xpath("//*[@class='btn_mainEntry']")
 50 
 51             dictx1 = {}
 52             btn_poster_title_list = []
 53             for element in btn_poster_elements:
 54                 class_attr = str(element.get('class'))
 55                 data_title = str(element.get('data-title'))
 56                 # btn_poster_title_list.append(data_title)
 57                 data_pictures = json.loads(str(element.get('data-pictures')).replace("'", '"'))
 58                 # 打印提取到的属性
 59                 # print(f"class_attr: {class_attr}",f"data-title: {data_title}",f"data-pictures: {data_pictures}")
 60                 picture = data_pictures.get("picture")
 61                 backPicture = data_pictures.get("backPicture")
 62                 if picture != '' and backPicture != '':
 63                     dictx1[data_title] = [picture, backPicture]
 64                     btn_poster_title_list.append(str(data_title + '-E'))
 65                     btn_poster_title_list.append(str(data_title + '-I'))
 66 
 67                 elif picture != '':
 68                     dictx1[data_title] = [picture]
 69                     btn_poster_title_list.append(str(data_title + '-E'))
 70                 elif backPicture != '':
 71                     dictx1[data_title] = [backPicture]
 72                     btn_poster_title_list.append(str(data_title + '-I'))
 73             # print("-"*100)
 74             # print(dictx1)
 75             # print("-"*100)
 76             btn_poster = sum([len(v) for v in dictx1.values()])
 77             # print(sum([ len(v) for v in dictx1.values()]))
 78             btn_poster_title_list.sort()
 79 
 80             dictx2 = {}
 81             btn_table_dataId_list = []
 82             for element in btn_table_elements:
 83                 class_attr = element.get('class')
 84                 data_table_id = str(element.get('data-table-id')).replace(' ', '')
 85                 # print(data_table_id)
 86                 btn_table_dataId_list.append(data_table_id)
 87                 data_title = str(element.get('data-title'))
 88                 data_sku = str(element.get('data-sku'))
 89                 # 打印提取到的属性
 90                 # print(f"class_attr: {class_attr}",f"data-title: {data_table_id}",f"data-pictures: {data_title}",f"data-sku:{data_sku}")
 91                 dictx2[data_table_id] = (data_sku, data_title)
 92             # print(dictx2)
 93             btn_table_dataId_list.sort()
 94             # print(btn_table_dataId_list)
 95 
 96             dictx3 = {}
 97             btn_poster_title_list_v1 = []
 98             for element in btn_mainEntry_elements:
 99                 class_attr = element.get('class')
100                 data_items = json.loads(str(element.get('data-items')).replace("'", '"'))
101                 data_title = element.get('data-title')
102                 data_posters = json.loads(str(element.get('data-posters')).replace("'", '"'))
103                 # 打印提取到的属性
104                 dictx3[
105                     "btn_mainEntryx"] = f"class_attr: {class_attr}\n", f"data_items: {data_items}\n", f"data_title: {data_title}\n", f"data_posters:{data_posters}"
106                 # print(f"class_attr: {class_attr}\n",f"data_items: {data_items}\n",f"data_title: {data_title}\n",f"data_posters:{data_posters}")
107                 data_items_titles = [item['title'] for item in data_items]
108                 data_posters_titles = [item['title'] for item in data_posters]
109                 data_posters_tit = [item['title'] for item in data_posters][0] if len(
110                     [item['title'] for item in data_posters]) > 0 else ''
111                 picture = [item['picture'] for item in data_posters][0] if len(
112                     [item['picture'] for item in data_posters]) else ''
113                 backPicture = [item['backPicture'] for item in data_posters][0] if len(
114                     [item['backPicture'] for item in data_posters]) else ''
115                 if picture != '' and backPicture != '':
116                     data_posters_titles[0] = str(data_posters_tit) + "-E"
117                     data_posters_titles.append(str(data_posters_tit) + "-I")
118                 elif picture != '':
119                     data_posters_titles[0] = str(data_posters_tit) + "-E"
120 
121                 elif backPicture != '':
122                     data_posters_titles[0] = str(data_posters_tit) + "-I"
123 
124                 import itertools
125 
126                 btn_poster_title_list_v1.extend(data_items_titles)
127                 btn_poster_title_list_v1.extend(data_posters_titles)
128 
129             btn_poster_title_list_v1 = btn_poster_title_list + btn_poster_title_list_v1
130             btn_poster_title_list_v1.sort()
131 
132             # print(dictx3)
133 
134             dictx["btn_table"] = dictx2
135             dictx["btn_poster"] = dictx1
136             dictx["btn_mainEntry"] = dictx3
137             # print(dictx)
138 
139             from mysql.connector import Error
140 
141             try:
142                 # 连接到 MySQL 数据库
143                 connection = mysql.connector.connect(
144                     host='',  # 数据库主机地址
145                     user='',  # 数据库用户名
146                     password=',  # 数据库密码
147                     database=''  # 数据库名称
148                 )
149                 if connection.is_connected():
150                     # 创建游标对象
151                     cursor = connection.cursor()
152                     # cursor.execute(create_table_query)
153                     # 插入数据
154                     insert_query = '''
155                           INSERT INTO tmp_store_svg_info_1 (
156                             url,
157                             store_id,
158                             btn_table,
159                             btn_poster,
160                             btn_mainEntry,
161                             btn_table_dataId_list,
162                             btn_poster_title_list,
163                             svg_btn_info,
164                             svg_xml,
165                             create_time
166                           ) VALUES (
167                             %s, %s, %s, %s, %s,%s,%s, %s, %s, NOW()
168                           )
169                           '''
170 
171                     # data_to_insert = [(
172                     #     url
173                     #     , pos_id
174                     #     , str(btn_table)
175                     #     , str(len(btn_poster_title_list_v1))
176                     #     , str(btn_mainEntry)
177                     #     , str(btn_table_dataId_list).replace("'", '"')
178                     #     , str(btn_poster_title_list_v1).replace("'", '"')
179                     #     , json.dumps(dictx)
180                     #     , str(svg_content)
181                     # )]
182 
183 
184                     print("data_to_insert=",len(data_to_insert))
185                     if len(data_to_insert)==100:
186                         cursor.executemany(insert_query, data_to_insert)
187                         connection.commit()
188                         data_to_insert.clear()
189                         cursor.close()
190                         connection.close()
191                         print("数据插入成功")
192                     else:
193                         data_to_insert.append(
194                             (
195                                 url
196                                 , pos_id
197                                 , str(btn_table)
198                                 , str(len(btn_poster_title_list_v1))
199                                 , str(btn_mainEntry)
200                                 , str(btn_table_dataId_list).replace("'", '"')
201                                 , str(btn_poster_title_list_v1).replace("'", '"')
202                                 , json.dumps(dictx)
203                                 , str(svg_content)
204                             )
205 
206                         )
207             except Error as e:
208                 print(f"Error: {e}")
209                 if connection.is_connected():
210                     connection.rollback()  # 回滚事务
211             finally:
212                 # 关闭游标和连接
213                 if connection.is_connected():
214                     cursor.close()
215                     connection.close()
216                     print("数据库连接已关闭")
217         except JSONDecodeError as e:
218             print(url)
219             continue
220 
221 
222 def save(connection,li):
223     try:
224         insert_query = '''
225               INSERT INTO tmp_store_svg_info_1 (
226                 url,
227                 store_id,
228                 btn_table,
229                 btn_poster,
230                 btn_mainEntry,
231                 btn_table_dataId_list,
232                 btn_poster_title_list,
233                 svg_btn_info,
234                 svg_xml,
235                 create_time
236               ) VALUES (
237                 %s, %s, %s, %s, %s,%s,%s, %s, %s, NOW()
238               )
239               '''
240         if connection.is_connected():
241             # 创建游标对象
242             cursor = connection.cursor()
243             if len(data_to_insert) == 100:
244                 cursor.executemany(insert_query, data_to_insert)
245                 connection.commit()
246                 data_to_insert.clear()
247                 cursor.close()
248                 connection.close()
249                 print("数据插入成功")
250 
251     except Error as e:
252         print(f"Error: {e}")
253         if connection.is_connected():
254             connection.rollback()  # 回滚事务
255     finally:
256         # 关闭游标和连接
257         if connection.is_connected():
258             cursor.close()
259             connection.close()
260             print("数据库连接已关闭")
View Code

 

标签:title,svg,list,poster,python3.6,mysql,print,btn,data
From: https://www.cnblogs.com/linbo3168/p/18464391

相关文章

  • MySQL Workbench的安装
    MySQLWorkbench是一款由MySQL官方开发和提供的统一可视化工具,专为数据库管理员、开发者和数据架构师设计。它提供了数据建模、SQL开发和数据库管理的全面功能,支持Windows、Linux和macOS操作系统。MySQLWorkbench是一个强大的工具,它通过图形界面简化了许多复杂的数据......
  • 基于Java+Jsp+Ssm+Mysql实现的在线乡村风景美食景点旅游平台功能设计与实现一
    一、前言介绍:1.1项目摘要乡村风景美食旅游平台的课题背景主要基于我国旅游产业的现状与发展需求。当前,我国旅游产业虽然发展迅速,但仍然存在基础薄弱、管理手段滞后、信息化程度低等问题。旅游行政管理部门的管理方式相对落后,缺乏有效的信息化管理手段,信息沟通渠道不畅,这......
  • 基于Java+Jsp+Ssm+Mysql实现的在线乡村风景美食景点旅游平台功能设计与实现二
    一、前言介绍:1.1项目摘要乡村风景美食旅游平台的课题背景主要基于我国旅游产业的现状与发展需求。当前,我国旅游产业虽然发展迅速,但仍然存在基础薄弱、管理手段滞后、信息化程度低等问题。旅游行政管理部门的管理方式相对落后,缺乏有效的信息化管理手段,信息沟通渠道不畅,这......
  • mysql8: 主从复制从库报错时,找到主库上的sql
    一,从库机器上:从库mysql日志中的报错信息给出了日志文件名和end_log_pos2024-10-12T09:41:23.761203Z414[ERROR][MY-013146][Repl]ReplicaSQLforchannel'':Worker1failedexecutingtransaction'ANONYMOUS'atsourcelogmysql-master-bin.000002,end_log_pos......
  • MySQL 设计数据表
    一个数据表主要包含信息有:表名、主键、字段、数据类型、索引,本节主要介绍表的命名规范、字段命名、字段的数据类型选择。新建的表都是新建在“item_name”数据库中的,新建“item_name”数据库命令如下:CREATEDATABASEitem_name;新建数据库之后选择数据库:USE......
  • MySQL 的 JDBC 编程
    MySQL的JDBC编程使用java代码操作数据库jdbc统一了各种数据库的api准备阶段首先要准备编辑语言的安装:javajdk1.8数据库数据库驱动包:在中央仓库下载搜索MySQL第一个就是MySQLConnector/j下载完成后在IDEA中导入这个包打开IDEA新建一个java项目新建......
  • MySql数据库---存储过程(带in、out、inout参数,),变量定义,if,case判断,循环结构,游标,handler
    思维导图 存储过程概念MySQL5.0版本开始支持存储过程。简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数;存储过就是数据库SQL语言层面的代码封装与重用入门案例语法:delimiter自定义结束......
  • MySQL数据的导出
    有时需要将MySQL数据库中的数据导出到外部存储文件中,MySQL数据库中的数据可以导出成sql文本文件、xml文件或者html文件。本节将介绍数据导出的常用方法。11.4.1 使用SELECT…INTOOUTFILE导出文本文件MySQL数据库导出数据时,允许使用包含导出定义的SELECT语句进行数据的导出操......
  • CentOS免安装MySQL8实践
    所谓的免安装就是就是使用MySQL服务端二进制压缩包部署服务,而不是直接通过包管理器方式安装MySQL服务器。如下示例为在CentOS7环境免安装MySQL8.0.31服务器。在安装之前需要先检查下是否已经通过包管理器安装过MySQL服务器,如果已经安装,则先把安装的卸载。$rpm-qa|grepmys......
  • 【环境配置教程】MYSQL----win系统本地同时安装MySQL5.7.xx、MySQL8.0.xx
    文章目录1.下载mysql8和mysql5.7的压缩包2.解压到本地3.安装MySQL8.xx.xx第一步配置环境变量第二步新建配置文件第三步MySQL数据库初始化第四步临时密码第五步安装并开启mysql8服务第六步登陆mysql8修改密码4.安装MySQL5.7第一步配置环境变量第二步新建......