首页 > 编程语言 >Python小项目:通过商品条形码查询商品信息

Python小项目:通过商品条形码查询商品信息

时间:2023-08-17 19:32:08浏览次数:32  
标签:条形码 商品信息 img Python 查询 json code path logger

在这里插入图片描述

完整项目下载:下载链接

1 商品条形码

平日大家会购买许许多多的商品,无论是饮料、食品、药品、日用品等在商品的包装上都会有条形码。 商品条形码包括零售商品、非零售商品、物流单元、位置的代码和条码标识。我国采用国际通用的商品代码及条码标识体系,推广应用商品条形码,建立我国的商品标识系统。 零售商品是指在零售端通过POS扫描结算的商品。其条码标识由全球贸易项目代码(GTIN)及其对应的条码符号组成。零售商品的条码标识主要采用EAN/UPC条码。一听啤酒、一瓶洗发水和一瓶护发素的组合包装都可以作为一项零售商品卖给最终消费者。 总的来讲就是每一种在市面流通的商品都会有属于自己商品条形码。 在这里插入图片描述

2 查询商品条形码的目的

从技术方面来讲,本次利用Python通过商品条形码查询商品信息是为了练习爬虫技术。 从生活方面来讲,本次项目可以查询购买商品的信息,确保商品来源与成分可靠。

3 实现步骤及代码

3.1 爬取网站介绍

网站链接如下:条形码查询网站 网站截图如下: 在这里插入图片描述 可以看到在该网站中输入某一商品的条形码,后输入验证码。点击查询即可查询到商品信息。以“6901028001915”为例,进行一次查询,截图如下: 在这里插入图片描述

3.2 python代码实现

3.2.1 日志模块

为保存操作记录在项目中添加日志模块,代码如下:

import logging
import logging.handlers
'''
日志模块
'''
LOG_FILENAME = 'msg_seckill.log'
logger = logging.getLogger()


def set_logger():
    logger.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(process)d-%(threadName)s - '
                                  '%(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    file_handler = logging.handlers.RotatingFileHandler(
        LOG_FILENAME, maxBytes=10485760, backupCount=5, encoding="utf-8")
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)

set_logger()

3.2.2 查询模块

由上面的截图可以看到,网站查询需要数字验证码验证,因此这里使用ddddocr包来识别验证码。导入相应的包:

from logging import fatal
import ddddocr
import requests
import json
import os
import time
import sys
from msg_logger import logger

接下来是项目的主体代码,整个操作逻辑代码注释中有详细讲解:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
path = os.path.abspath(os.path.dirname(sys.argv[0]))

# json化
def parse_json(s):
    begin = s.find('{')
    end = s.rfind('}') + 1
    return json.loads(s[begin:end])

# 创建目录
def mkdir(path):
     # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")
    # 判断路径是否存在
    isExists=os.path.exists(path)
    # 判断结果
    if not isExists:
        os.makedirs(path)
        logger.info(path + ' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        logger.info(path + ' 目录已存在')
        return False

# 爬取 "tiaoma.cnaidc.com" 来查找商品信息
def requestT1(shop_id):
    url = 'http://tiaoma.cnaidc.com'
    s = requests.session()

    # 获取验证码
    img_data  = s.get(url + '/index/verify.html?time=',  headers=headers).content
    with open('verification_code.png','wb') as v:
        v.write(img_data)

    # 解验证码
    ocr = ddddocr.DdddOcr()
    with open('verification_code.png', 'rb') as f:
        img_bytes = f.read()
    code = ocr.classification(img_bytes)
    logger.info('当前验证码为 ' + code)
    # 请求接口参数
    data = {"code": shop_id, "verify": code}
    resp = s.post(url + '/index/search.html',headers=headers,data=data)
    resp_json = parse_json(resp.text)
    logger.info(resp_json)

    # 判断是否查询成功
    if resp_json['msg'] == '查询成功' and resp_json['json'].get('code_img'):
        # 保存商品图片
        img_url = ''
        if resp_json['json']['code_img'].find('http') == -1:
            img_url =  url + resp_json['json']['code_img']
        else:
            img_url =  resp_json['json']['code_img']

        try:
            shop_img_data  = s.get(img_url,  headers=headers, timeout=10,).content
             # 新建目录
            mkdir(path + '\\' + shop_id)
            localtime = time.strftime("%Y%m%d%H%M%S", time.localtime())
            # 保存图片
            with open(path + '\\' + shop_id + '\\' + str(localtime) +'.png','wb') as v:
                v.write(shop_img_data)
            logger.info(path + '\\' + shop_id + '\\' + str(localtime) +'.png')
        except requests.exceptions.ConnectionError:
            logger.info('访问图片URL出现错误!') 
       
    if resp_json['msg'] == '验证码错误':
        requestT1(shop_id)

    return resp_json

3.2.3 运行结果

if __name__ == "__main__":
    try:
        dict_info = requestT1('6901028001915')['json']
        print(dict_info['code_sn'])
        print(dict_info['code_name'])
        print(dict_info['code_company'])
        print(dict_info['code_address'])
        print(dict_info['code_price'])
    except:
        print('商品无法查询!')

尝试运行代码,以“6901028001915”为例,查看运行结果: 在这里插入图片描述 可见商品的信息成功查询出来。

4 结语

通过本文的指导,我们深入了解了如何利用Python通过商品条形码查询商品信息的方法。商品条形码在现代零售业中扮演着重要的角色,我们通过编写Python程序,实现了通过条形码自动查询商品细节的功能。通过爬取网站并使用Python的请求库,我们能够从第三方API获取商品信息,并将其整理成易于理解的格式。在实现过程中,我们介绍了如何使用日志模块进行错误跟踪,以及如何结合查询模块将程序功能完整地实现。最后,我们展示了运行结果,验证了查询商品信息的准确性和便捷性。通过这篇文章,读者将能够轻松掌握查询商品信息的技巧,为商业和消费者提供更加方便的购物体验。

在这里插入图片描述

标签:条形码,商品信息,img,Python,查询,json,code,path,logger
From: https://blog.51cto.com/u_15229916/7126917

相关文章

  • Python小项目:利用tkinter与图灵机器人制作智能聊天系统
    1前言在本项目中,我们将探索如何使用Python的tkinter库以及图灵机器人API来构建一个智能聊天系统。本项目的初衷是通过实际操作,结合GUI编程和API调用,展示如何创建一个有趣且实用的小应用。我们将借助tkinter创建一个类似QQ聊天框的界面,并使用图灵机器人的API来实现自动化的智能聊......
  • python rasa聊天机器人教程四:action查询今天是星期几
    1.修改nlm.yml添加意图-intent:ask_dayexamples:|-今天是星期几?-今天星期几?-现在是星期几?2.修改domain.ymlintents里面增加intents:-ask_day actions里面增加actions:-action_get_day 3.修改rules.yml-rule:respondtoday......
  • 【python基础】repr函数
     描述repr()函数将对象转化为供解释器读取的形式。语法以下是repr()方法的语法:repr(object)参数object--对象。返回值返回一个对象的string格式。实例#coding=UTF-8s="物品\t单价\t数量\n包子\t1\t2"print(s)print(repr(s))output:物品单价......
  • 必备Python代码
    Python是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性。如果读者对基本的Python语法已经有一些了解,那么这篇文章可能会给你一些启发。1.重复元素判定以下方法可以检查给定列表是不是存在重复元素,它会使用set()函数来移除所有重复元素。defall_unique(lst):......
  • Python3 函数
    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的......
  • 转载:python装饰器解析
    原文链接:https://www.cnblogs.com/songyunjie/p/16825830.html这里修正原文代码中的部分错误,调试的python版本为:3.9.161、什么是装饰器?Python的装饰器本质上是一个嵌套函数,它接受被装饰的函数(func)作为参数,并返回一个包装过的函数。这样我们可以在不改变被装饰函数的代码的情况下......
  • Python学习日记 2023年8月17日
    今天有点懒啊,做的东西少了点importosimportjiebaimportwordcloudimportimageio#pho=imageio.imread('7848.jpg')f=open('口红.txt')txt=f.read()txt_list=jieba.lcut(txt)string=''.join(txt_list)wc=wordcloud.WordCloud(......
  • Python分享之requests(3)
    6)身份验证基本身份认证(HTTPBasicAuth)importrequestsfromrequests.authimportHTTPBasicAuthr=requests.get('https://httpbin.org/hidden-basic-auth/user/passwd',auth=HTTPBasicAuth('user','passwd'))#r=requests.get('http......
  • 你能发现这段 Python 代码中的 bug 吗?
    点击链接了解详情【CSDN编者按】大家一起来找Bug。原文链接:https://dwrodri.gitlab.io/can-you-spot-the-bug-in-this-python-code/本文已获作者授权,未经允许,禁止转载!作者|DerekRodriguez译者|弯月责编|夏萌出品|CSDN(ID:CSDNnews)最近,在解析文本时,我遇到了一个......
  • Python爬虫初探
    title:Python爬虫初探date:2023-08-0116:16:51categories:CTF-Web入门description:爬取吉大贴吧前十页帖子标题终于到了基础知识的最后一节,python写爬虫程序。Python写简单爬虫主要是两个模块,requests和re,下面分别介绍一下这两个模块。requests模块初探请求模块,用来......