0

0

使用paddleOCR完成价格提取并实现可视化

P粉084495128

P粉084495128

发布时间:2025-08-01 14:16:45

|

633人浏览过

|

来源于php中文网

原创

该项目通过pyautogui控制鼠标点击金投网各省份页面并截图,利用paddleOCR提取废弃金属价格数据,经pymysql存入MySQL。再以Flask搭建后端,结合百度echart框架实现各省份价格实时动态可视化,解决了网站路径多变导致的爬虫获取数据难题。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用paddleocr完成价格提取并实现可视化 - php中文网

一、项目介绍

基于文字提取技术paddleOCR实现在金投网上获取各个省份的当日废弃金属价格。区别于爬虫获取网页数据,本项目使用脚本控制鼠标来获取网页截图,用paddleocr技术提取价格数据,在不使用爬虫的技术下也能精准的获取想要的价格数据。

使用paddleOCR完成价格提取并实现可视化 - php中文网

本项目还借用百度的echart框架,再加上flask技术,搭建了一个简单的网页,用于对各省份价格数据的实时动态可视化,下面是可视化网页的效果展示。

使用paddleOCR完成价格提取并实现可视化 - php中文网

二、详细说明

最近铁的价格波动较大,去网站上搜了一下各省份的价格,发现铁价呈现南高北低,相邻省份价格相近等情况,于是想把这网页上的数据爬取下来并加上一个中国地图实现各省份铁价可视化,研究了金投网后发现由于废弃金属产品较多,数据量过大,该网页采取一个省份设置一个路径的方式存储一个产品的数据,不利于在单个网页获取全部数据,且不同时间其路径也不一样,用爬虫来获取数据难度有点高,于是借鉴了之前写的项目,基于paddleOCR获取数字产品价格,作者编写了脚本控制鼠标点击并截图,后期通过文字提取的方式来获取网页数据。 接下来会分几步来简述项目实现过程。
2.1、脚本 通过pyautogui库控制鼠标点击,由于数据量过大,这里就简单展示前两个省份的代码。(受限于这是一个在线的notebook,无法进行鼠标键盘的交互。所以下面的代码仅供展示作用,不要运行!)

In [ ]

import time  # 加入time函数,可以控制点击时间,等网页完全打开后再截图 import pyautogui as pg  # 用于控制鼠标 from PIL import ImageGrab  # 截取网页 city = ["北京", "上海", "天津", "重庆", "广东", "浙江", "江苏", "江西",         "安徽", "河南", "河北", "山东", "福建", "湖南", "湖北",         "广西", "山西", "陕西", "宁夏", "甘肃", "新疆", "青海", "海南",         "贵州", "云南", "四川", "西藏", "内蒙古", "辽宁", "吉林", "黑龙江"] time.sleep(5)  # 进入界面后等待5秒 pg.click(360, 600)  # 选择第一个城市(北京),360,600为鼠标在屏幕上的坐标点。 pg.click(900, 485)  # 把鼠标移开 time.sleep(2) image = ImageGrab.grab(bbox=(230, 600, 520, 720))  # 截图 image.save(str(0) + ".png")  # 保存图片 print("已保存"+city[0]+"城市铁价") pg.click(600, 485)  # 回到省份界面 time.sleep(2) pg.click(480, 600)  # 选择第2个城市(上海) time.sleep(1) pg.click(900, 485)  # 把鼠标移开 time.sleep(2) image = ImageGrab.grab(bbox=(230, 600, 520, 720))  # 截图 image.save(str(1) + ".png")  # 保存图片 print("已保存"+city[1]+"城市铁价") pg.click(600, 485)  # 回到省份界面 time.sleep(2)
2.2、文字提取 先给大家简单介绍一下paddleOCR,PaddleOCR,一款文本识别效果不输于商用的Python库!支持多语言识别,目前能够支持 80 多种语言;除了能对中文、英语、数字识别之外,还能应对字体倾斜、文本中含有小数点字符等复杂情况;提供有丰富的 OCR ;域相关工具供我们使用,方便我们制作自己的数据集、用于训练
2.2.1、解压数据集(价格截图) 下图为截取的图片

使用paddleOCR完成价格提取并实现可视化 - php中文网

In [1]

!unzip -oq /home/aistudio/data/data163670/price_of_scrap_iron.zip -d price
2.2.2、下载paddleocr

In [2]

商易多用户商城
商易多用户商城

功能介绍:1. 商品出售包含拍卖模式,一口价模式。2. 全套系统采用淘宝网风格,成熟,简洁大方3. 每个商品支持多张图片上传,可自由设定,满足广大网民的迫切要求4. 商品信息支持 ubb,图文并茂5. 注册用户可参与竞拍,或者拍卖自己的商品6. 拥有会员注册,交易提醒,成交商品确认等邮件发送功能7. 拥有交易双方信用评价的功能,使得交易安全可*,可信度高8. 拥有安全稳定的用户虚拟币平台,可实现商

下载
!pip install paddleocr
2.2.3、使用paddleocr技术提取价格数据

In [5]

from paddleocr import PaddleOCR money1 = []  # 用于存储ocr提取出来的数据 money_all = []  # 存储全部价格 all_address = ["北京", "上海", "天津", "重庆", "广东", "浙江", "江苏", "江西",                "安徽", "河南", "河北", "山东", "福建", "湖南", "湖北",                "广西", "山西", "陕西", "宁夏", "甘肃", "新疆", "青海", "海南",                "贵州", "云南", "四川", "西藏", "内蒙古", "辽宁", "吉林", "黑龙江"] ocr = PaddleOCR(use_angle_cls=True, lang="ch") for i in range(30):  # 把脚本截图图片通过OCR识别提取价格     img_path = str("price/各省废弃金属-铁-价格/"+str(i) + ".png")  # 设定价格图片路径     result = ocr.ocr(img_path, cls=False, det=True, rec=True)  # ocr读取     for line in result:         #print(line[1][0])  # 输出读取内容         money1.append(line[1][0])  # 存储     money = money1[1+(3*i)]  # 有3个数据,把第二个价格数据提取出来     money_all.append(money)  # 把价格录到总价格中     print("省份:"+all_address[i]+"    价格"+money_all[i])
[2022/08/10 16:10:57] ppocr DEBUG: Namespace(alpha=1.0, benchmark=False, beta=1.0, cls_batch_num=6, cls_image_shape='3, 48, 192', cls_model_dir='/home/aistudio/.paddleocr/whl/cls/ch_ppocr_mobile_v2.0_cls_infer', cls_thresh=0.9, cpu_threads=10, crop_res_save_dir='./output', det=True, det_algorithm='DB', det_db_box_thresh=0.6, det_db_score_mode='fast', det_db_thresh=0.3, det_db_unclip_ratio=1.5, det_east_cover_thresh=0.1, det_east_nms_thresh=0.2, det_east_score_thresh=0.8, det_fce_box_type='poly', det_limit_side_len=960, det_limit_type='max', det_model_dir='/home/aistudio/.paddleocr/whl/det/ch/ch_PP-OCRv3_det_infer', det_pse_box_thresh=0.85, det_pse_box_type='quad', det_pse_min_area=16, det_pse_scale=1, det_pse_thresh=0, det_sast_nms_thresh=0.2, det_sast_polygon=False, det_sast_score_thresh=0.5, draw_img_save_dir='./inference_results', drop_score=0.5, e2e_algorithm='PGNet', e2e_char_dict_path='./ppocr/utils/ic15_dict.txt', e2e_limit_side_len=768, e2e_limit_type='max', e2e_model_dir=None, e2e_pgnet_mode='fast', e2e_pgnet_score_thresh=0.5, e2e_pgnet_valid_set='totaltext', enable_mkldnn=False, fourier_degree=5, gpu_mem=500, help='==SUPPRESS==', image_dir=None, ir_optim=True, label_list=['0', '180'],, layout=True, layout_label_map=None, layout_path_model='lp://PubLayNet/ppyolov2_r50vd_dcn_365e_publaynet/config', max_batch_size=10, max_text_length=25, min_subgraph_size=15, mode='structure', ocr=True, ocr_version='PP-OCRv3', output='./output', precision='fp32', process_id=0, rec=True, rec_algorithm='SVTR_LCNet', rec_batch_num=6, rec_char_dict_path='/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddleocr/ppocr/utils/ppocr_keys_v1.txt', rec_image_shape='3, 48, 320', rec_model_dir='/home/aistudio/.paddleocr/whl/rec/ch/ch_PP-OCRv3_rec_infer', save_crop_res=False, save_log_path='./log_output/', scales=[8, 16, 32], show_log=True, structure_version='PP-STRUCTURE', table=True, table_char_dict_path=None, table_max_len=488, table_model_dir=None, total_process_num=1, type='ocr', use_angle_cls=True, use_dilation=False, use_gpu=False, use_mp=False, use_onnx=False, use_pdserving=False, use_space_char=True, use_tensorrt=False, vis_font_path='./doc/fonts/simfang.ttf', warmup=False) [2022/08/10 16:10:58] ppocr DEBUG: dt_boxes num : 3, elapse : 0.18548965454101562 [2022/08/10 16:11:00] ppocr DEBUG: rec_res num  : 3, elapse : 1.4084184169769287 省份:北京    价格1900.00 [2022/08/10 16:11:00] ppocr DEBUG: dt_boxes num : 3, elapse : 0.28911447525024414 [2022/08/10 16:11:01] ppocr DEBUG: rec_res num  : 3, elapse : 1.4035155773162842 省份:上海    价格2380.00 [2022/08/10 16:11:02] ppocr DEBUG: dt_boxes num : 3, elapse : 0.291318416595459 [2022/08/10 16:11:03] ppocr DEBUG: rec_res num  : 3, elapse : 1.3992137908935547 省份:天津    价格2000.00 [2022/08/10 16:11:03] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20323419570922852 [2022/08/10 16:11:05] ppocr DEBUG: rec_res num  : 3, elapse : 1.3923869132995605 省份:重庆    价格1750.00 [2022/08/10 16:11:05] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20437145233154297 [2022/08/10 16:11:06] ppocr DEBUG: rec_res num  : 3, elapse : 1.499875545501709 省份:广东    价格2240.00 [2022/08/10 16:11:07] ppocr DEBUG: dt_boxes num : 3, elapse : 0.28789258003234863 [2022/08/10 16:11:08] ppocr DEBUG: rec_res num  : 3, elapse : 1.6108949184417725 省份:浙江    价格2470.00 [2022/08/10 16:11:08] ppocr DEBUG: dt_boxes num : 3, elapse : 0.28465819358825684 [2022/08/10 16:11:10] ppocr DEBUG: rec_res num  : 3, elapse : 1.4023168087005615 省份:江苏    价格1770.00 [2022/08/10 16:11:10] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2079639434814453 [2022/08/10 16:11:12] ppocr DEBUG: rec_res num  : 3, elapse : 1.418123483657837 省份:江西    价格2250.00 [2022/08/10 16:11:12] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2044999599456787 [2022/08/10 16:11:13] ppocr DEBUG: rec_res num  : 3, elapse : 1.408416986465454 省份:安徽    价格2360.00 [2022/08/10 16:11:13] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2003467082977295 [2022/08/10 16:11:15] ppocr DEBUG: rec_res num  : 3, elapse : 1.4108216762542725 省份:河南    价格1905.00 [2022/08/10 16:11:15] ppocr DEBUG: dt_boxes num : 3, elapse : 0.30034303665161133 [2022/08/10 16:11:17] ppocr DEBUG: rec_res num  : 3, elapse : 1.5090062618255615 省份:河北    价格1830.00 [2022/08/10 16:11:17] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2920353412628174 [2022/08/10 16:11:19] ppocr DEBUG: rec_res num  : 3, elapse : 1.4099595546722412 省份:山东    价格2230.00 [2022/08/10 16:11:19] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20354890823364258 [2022/08/10 16:11:20] ppocr DEBUG: rec_res num  : 3, elapse : 1.4975931644439697 省份:福建    价格2070.00 [2022/08/10 16:11:21] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20367145538330078 [2022/08/10 16:11:22] ppocr DEBUG: rec_res num  : 3, elapse : 1.399881362915039 省份:湖南    价格1800.00 [2022/08/10 16:11:22] ppocr DEBUG: dt_boxes num : 3, elapse : 0.28646397590637207 [2022/08/10 16:11:24] ppocr DEBUG: rec_res num  : 3, elapse : 1.4092700481414795 省份:湖北    价格2280.00 [2022/08/10 16:11:24] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2845890522003174 [2022/08/10 16:11:25] ppocr DEBUG: rec_res num  : 3, elapse : 1.402533769607544 省份:广西    价格2280.00 [2022/08/10 16:11:26] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20486736297607422 [2022/08/10 16:11:27] ppocr DEBUG: rec_res num  : 3, elapse : 1.3977165222167969 省份:山西    价格1915.00 [2022/08/10 16:11:27] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2967183589935303 [2022/08/10 16:11:29] ppocr DEBUG: rec_res num  : 3, elapse : 1.7988090515136719 省份:陕西    价格1990.00 [2022/08/10 16:11:29] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2913792133331299 [2022/08/10 16:11:31] ppocr DEBUG: rec_res num  : 3, elapse : 1.5969874858856201 省份:宁夏    价格1700.00 [2022/08/10 16:11:31] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2055673599243164 [2022/08/10 16:11:33] ppocr DEBUG: rec_res num  : 3, elapse : 1.5008113384246826 省份:甘肃    价格1815.00 [2022/08/10 16:11:33] ppocr DEBUG: dt_boxes num : 3, elapse : 0.28537464141845703 [2022/08/10 16:11:34] ppocr DEBUG: rec_res num  : 3, elapse : 1.4073350429534912 省份:新疆    价格1845.00 [2022/08/10 16:11:35] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2010488510131836 [2022/08/10 16:11:36] ppocr DEBUG: rec_res num  : 3, elapse : 1.484731674194336 省份:青海    价格1835.00 [2022/08/10 16:11:36] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20502114295959473 [2022/08/10 16:11:38] ppocr DEBUG: rec_res num  : 3, elapse : 1.3996272087097168 省份:海南    价格1785.00 [2022/08/10 16:11:38] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2883188724517822 [2022/08/10 16:11:39] ppocr DEBUG: rec_res num  : 3, elapse : 1.4016520977020264 省份:贵州    价格1915.00 [2022/08/10 16:11:40] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2922041416168213 [2022/08/10 16:11:41] ppocr DEBUG: rec_res num  : 3, elapse : 1.502861738204956 省份:云南    价格1965.00 [2022/08/10 16:11:41] ppocr DEBUG: dt_boxes num : 3, elapse : 0.2015540599822998 [2022/08/10 16:11:43] ppocr DEBUG: rec_res num  : 3, elapse : 1.3932435512542725 省份:四川    价格2350.00 [2022/08/10 16:11:43] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20165038108825684 [2022/08/10 16:11:44] ppocr DEBUG: rec_res num  : 3, elapse : 1.310579538345337 省份:西藏    价格1785.00 [2022/08/10 16:11:45] ppocr DEBUG: dt_boxes num : 3, elapse : 0.204742431640625 [2022/08/10 16:11:46] ppocr DEBUG: rec_res num  : 3, elapse : 1.399357557296753 省份:内蒙古    价格1765.00 [2022/08/10 16:11:46] ppocr DEBUG: dt_boxes num : 3, elapse : 0.19914031028747559 [2022/08/10 16:11:48] ppocr DEBUG: rec_res num  : 3, elapse : 1.3909227848052979 省份:辽宁    价格1915.00 [2022/08/10 16:11:48] ppocr DEBUG: dt_boxes num : 3, elapse : 0.20081448554992676 [2022/08/10 16:11:49] ppocr DEBUG: rec_res num  : 3, elapse : 1.394876480102539 省份:吉林    价格1735.00
2.3、使用pymysql把数据导入到mysql(受限于这是一个在线的notebook,无法调用本地摄像头或者无法进行鼠标键盘的交互。下面的代码仅供展示作用,不要运行!)

In [1]

    # 打开数据库连接     conn1 = pymysql.connect(host='localhost',                             user='root',                             password='123456',                             database='test_to_feitie')  # 表名     # 使用cursor()方法获取操作游标     cursor = conn1.cursor()     # SQL 更新语句     sql = "insert into test1 values(%s,%s,%s)"     cursor.execute(sql, [all_address[i], "2022-8-08", money_all[i]])  # 录入格式为:省份varchar,时间varchar,价格:int     conn1.commit()     cursor.close()     conn1.close()     print("成功把"+all_address[i]+"今日铁价写入test1中")
2.4.1、使用flask搭建后端。Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。下面是搭建后端的代码。(受限于这是一个在线的notebook,无法调用本地摄像头或者无法进行鼠标键盘的交互。下面的代码仅供展示作用,不要运行!)

In [ ]

from flask import Flask from flask import render_template from flask import jsonify import utils app = Flask(__name__) @app.route('/') def h_1():     return render_template("main.html") @app.route("/c2")  # 搭建c2路由用于获取mysql中的省份名字/价格信息 def get_c2_data():     res = []     for tup in utils.get_c2_data():         res.append({"name":tup[0],"value":int(tup[1])})     return jsonify({"data":res})  # 转化为json格式的数据 @app.route("/l1")  # 搭建l1路由用于获取MySQL中的佛山市所有价格数据 def get_l1_data():     data = utils.get_l1_data()     time,feitie,shengtie = [],[],[]     for a,b,c in data[:]:         time.append(a)         feitie.append(b)         shengtie.append(c)     return jsonify({"time":time,"feitie":feitie,"shengtie":shengtie}) if __name__ == '__main__':     app.run()
2.4.2、使用pymysql获取保存的数据(受限于这是一个在线的notebook,无法调用本地摄像头或者无法进行鼠标键盘的交互。下面的代码仅供展示作用,不要运行!)

In [ ]

import pymysql def get_conn():     # 打开数据库连接     conn = pymysql.connect(host='localhost',                            user='root',                            password='123456',                            database='test_to_feitie')     # 使用cursor()方法获取操作游标     cursor = conn.cursor()     return conn, cursor def close_conn(conn,cursor):     cursor.close()     conn.close() def query(sql,*args):     conn, cursor = get_conn()     cursor.execute(sql,args)     res = cursor.fetchall()     close_conn(conn, cursor)     return res def get_c2_data():     # sql = "select address,money from test1"     sql = "select address,money from test1 where(times=\"2022-8-08\")"     res = query(sql)     return res def get_l1_data():     sql = "select time,feitie,shengtie from foshan_test1"     res = query(sql)     return res if __name__ == "__main__":     print(get_l1_data())

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

661

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

245

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

5

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 791人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号