当前位置: 首页 > news >正文

通过条形码图片获取对应商品信息python程序

最近需要通过条形码获取商品信息并整理一个商品信息数据表。直接手动录入商品信息太慢了,聪明如我一样的it人员是不会干这么多重复低效率的事情的,于是想到写个python程序来处理这个工作。首先想到的是把包含商品条形码图片中的条形码自动读取出来,然后通过条形码在一个数据库中查询这个商品信息。好了整体思路就两条:

一、识别商品图片中的条形码。这个采用opencv来解决

二、在一个数据库中查询条形码包含的商品信息。这个比第一个稍微麻烦些。因为本地没有这么一个数据库,网上找了好几个通过条形码查找商品信息的网站都不是太好用或收费。最后在多次查找后找到一个免费还比较好用条形码查询网站:https://68api.com/barcode  

上面两个主要问题的资源都找到了,下面就是怎么通过程序把这些整合起来自动获取我想要的信息并保存到excel,下面就直接上完整代码(本项目以查询药品为例):

import requests
import cv2
import os, sys
from pyzbar import pyzbar
from bs4 import BeautifulSoup
import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Fontpathexist = os.path.exists
pathjoin = os.path.join# https://68api.com/barcode/6943116401245
# C:\Users\issuser\AppData\Local\Temp\_MEI69042\pyzbar\libiconv.dll
def writexls(itms, datas, fxls, sr=1, sc=1, title=' ', is_sv_fmt=True):def save_with_format(filename):# 加载刚刚创建的工作簿wb = load_workbook(filename)ws = wb.active# 设置默认字体和行高default_font = Font(name='Arial', size=10)for row in ws.iter_rows():for cell in row:cell.font = default_font# 设置行高(根据字体大小调整,15-20之间比较合适)ws.row_dimensions[row[0].row].height = 20# 自动调整列宽for column in ws.columns:max_length = 0column_letter = column[0].column_letter  # 获取列字母(如A, B, C)# 找到该列中最长的内容for cell in column:try:if len(str(cell.value)) > max_length:max_length = len(str(cell.value))except:pass# 设置列宽,预留一些额外空间(1.2倍长度)adjusted_width = (max_length + 2) * 1.2# 限制最大宽度,避免过宽adjusted_width = min(adjusted_width, 400)# 设置最小宽度adjusted_width = max(adjusted_width, 10)ws.column_dimensions[column_letter].width = adjusted_width# 保存修改wb.save(filename)print(f"Excel文件已保存至 {filename},并自动调整了单元格宽高")sr = max(sr, 1)sc = max(sc, 1)# 创建Workbook对象workbook = openpyxl.Workbook()# 获取当前活动的Worksheetsheet = workbook.active# 设置Worksheet的标题sheet.title = title# 准备要写入的数据tdatas = [itms]tdatas.extend(datas)# 将数据写入单元格for i, r_data in enumerate(tdatas):for j, val in enumerate(r_data):sheet.cell(row=sr + i, column=sc + j, value=val)# 保存Workbook对象,创建Excel文件workbook.save(fxls)print('写入成功')if is_sv_fmt:save_with_format(fxls)#opencv 识别条形码
def scan_barcode(image_path):"""扫描图片中的条形码,返回编码"""print(image_path)image = cv2.imread(image_path)barcodes = pyzbar.decode(image)if barcodes:return barcodes[0].data.decode("utf-8")  # 返回第一个条形码的编码return None#通过条形码网站爬取商品信息
def get_prod_infos(url):html = requests.get(url)html.encoding = 'utf-8'soup = BeautifulSoup(html.text, 'lxml')bar_1_right = soup.find('div', class_='bar-1-right')strong = bar_1_right.find('strong')trade_name = strong.textbar_1_list = soup.find('div', class_='bar-1-list')infos = {'药名': trade_name}for child in bar_1_list.children:text = child.texttexts = text.strip().split('\n')if texts[0]:infos[texts[0]] = texts[1]bar_2_2_2_1 = soup.find('div', class_='bar-2-2-2-1')company = bar_2_2_2_1.textinfos['公司名'] = companyprint(infos)return infos#商品信息保存到excel中
def save_to_excel(xlsfile, infos):itms = list(infos[0].keys())datas = []for info in infos:data = [info[itm] for itm in itms]datas.append(data)writexls(itms, datas, xlsfile, sr=1, sc=1, title=' ')#通过包含条形码的图片获取商品信息
def bar_code2prod_info(dtdir):Ainfos = []imnames = os.listdir(dtdir)for imname in imnames:imfile = pathjoin(dtdir, imname)bar_code = scan_barcode(imfile)url = f'https://68api.com/barcode/{bar_code}'infos = get_prod_infos(url)Ainfos.append(infos)resdir, dirname = os.path.split(dtdir)xlsname = f'{dirname}.xlsx'xlsfile = pathjoin(resdir, xlsname)save_to_excel(xlsfile, Ainfos)# url = 'https://68api.com/barcode/6919108100090'#程序打包为exe
def tmp():if getattr(sys, 'frozen', False):  # 判断是否为打包后的程序mdir = os.path.dirname(sys.executable)  # 可执行文件所在目录else:mdir = os.path.dirname(__file__)  # 脚本所在目录print(mdir)dtdir = pathjoin(mdir, 'bar_code')bar_code2prod_info(dtdir)if __name__ == "__main__":tmp()

http://www.dtcms.com/a/563156.html

相关文章:

  • 个人网站做经营性仿牌网站怎么做301跳转
  • 深圳创同盟科技有限公司东营有能做网站优化
  • 做设计常逛的网站网站系统设计说明书
  • 免费的简历制作网站做网站app需多少钱
  • 重庆专业网站建设公司哪家好wordpress 微信同步
  • 龙岗建设高端网站房屋设计图怎么制作
  • 专业制作彩铃网站app和手机网站的区别
  • 创立公司网站福甭市建设局网站
  • 河南教育平台网站建设网络最火游戏排行榜
  • 做网站guangxiyanda营销策略分析论文
  • 江苏网站开发建设门户网站制作定制
  • 建设网站的服务费是指什么石景山网站建设公司哪个好
  • 网站系统设计网页作业怎么做一个网站
  • 人工智能之数学基础:离散型随机变量的期望怎么计算?
  • 泉州网站wordpress 能做什么
  • 做发包业务网站ftp转换wordpress
  • 建设网站的课题wordpress怎么重新配置文件
  • 在wordpress主题后台安装了多说插件但网站上显示不出评论模块安装百度一下
  • 惠济区城乡建设局网站谷歌平台推广外贸
  • 网站收录量下降微博优惠券网站怎么做的
  • 直播网站建设无锡建设工程服务中心
  • 重庆做网站建设公司排名深圳涂料网站建设
  • 做网站好听的域名wordpress登录注册小工具
  • 网站建设基础书籍提升学历的意义
  • 网站的结构是什么样的做网站能改吗
  • a站为什么不火了企业网络营销策略有哪些
  • 广州在线图文网络科技中心网站建设创新的盐城网站开发
  • 做贷款网站犯法吗企业运营数据分析报告
  • 企业如何建自己的网站wordpress 邮箱免验证
  • 定制网站建设公司费用网站建设工具品牌