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

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

时间:2023-08-15 18:01:37浏览次数:43  
标签:条形码 商品信息 img Python 查询 json code path



文章目录

  • 1 商品条形码
  • 2 查询商品条形码的目的
  • 3 实现步骤及代码
  • 3.1 爬取网站介绍
  • 3.2 python代码实现
  • 3.2.1 日志模块
  • 3.2.2 查询模块
  • 3.2.3 运行结果
  • 4 结语



Python小项目:通过商品条形码查询商品信息_开发语言

完整项目下载:下载链接

1 商品条形码

平日大家会购买许许多多的商品,无论是饮料、食品、药品、日用品等在商品的包装上都会有条形码。

商品条形码包括零售商品、非零售商品、物流单元、位置的代码和条码标识。我国采用国际通用的商品代码及条码标识体系,推广应用商品条形码,建立我国的商品标识系统。

零售商品是指在零售端通过POS扫描结算的商品。其条码标识由全球贸易项目代码(GTIN)及其对应的条码符号组成。零售商品的条码标识主要采用EAN/UPC条码。一听啤酒、一瓶洗发水和一瓶护发素的组合包装都可以作为一项零售商品卖给最终消费者。

总的来讲就是每一种在市面流通的商品都会有属于自己商品条形码。

Python小项目:通过商品条形码查询商品信息_开发语言_02

2 查询商品条形码的目的

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

3 实现步骤及代码

3.1 爬取网站介绍

网站链接如下:条形码查询网站 网站截图如下:

Python小项目:通过商品条形码查询商品信息_开发语言_03


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

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

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”为例,查看运行结果:

Python小项目:通过商品条形码查询商品信息_开发语言_05


可见商品的信息成功查询出来。

4 结语

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

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


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

相关文章

  • 【Python&RS】基于GDAL遥感影像分幅裁剪
    ​    随着科技的进步,遥感影像包含的信息越来越多,存储空间也变得很大,这就导致我们在处理影像时软件会非常的卡。同时目前很火的深度学习也需要对影像分割后制作样本集,所以今天给大家分享下如何使用Python的GDAL库对遥感影像进行分幅裁剪!一、导入需要的三方库   ......
  • python中 函数中的self是什么?
      self可视为类的实例,在使用类创建实例时,我们可能需要强制传入一些参数。所以一般在构造函数_init_里给实例的属性赋值。classStudent(obiect):def__init__(self,name,score):self.name=nameself.score=scoredefprint_score(self):......
  • python语言-----------------身份证信息提前验证
    ##截取身份证信息,判断身份证上面的具体信息:上代码:importredefextract_id_card_info(id_card):#匹配身份证号码并提取出生日期和顺序号match=re.match(r'(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d{1})(\d|X)',id_card)ifmatchisNone:returnNonearea......
  • ​python爬虫——爬取天气预报信息
    在本文中,我们将学习如何使用代理IP爬取天气预报信息。我们将使用Python编写程序,并使用requests和BeautifulSoup库来获取和解析HTML。此外,我们还将使用代理服务器来隐藏我们的IP地址,以避免被目标网站封禁。1.安装必须的库首先,我们需要安装必须的库,包括requests、beauti......
  • Python语言中如何实现字符串拼接?
    在学习和应用Python语言的过程中,我们经常会遇到字符串拼接的问题,其实不管是Python还是其他语言,都把字符串列为最基础和最不可或缺的数据类型,拼接字符串也是必备的一项技能,那么Python语言如何实现这个操作呢?以下是详细的内容:1、加号法使用简单直接,但这种方法效率低......
  • Python基础概念以及命名规范
    PythonBasicIntroduction介绍Pythonisadynamicandstronglytypedprogramminglanguage.Itemploysbothducktypingandgradualtypingviatypehints.WhilePythonsupportsmanydifferentprogrammingstyles,internallyeverythinginPythonisanobject......
  • ​python爬虫——爬取天气预报信息
    在本文中,我们将学习如何使用代理IP爬取天气预报信息。我们将使用Python编写程序,并使用requests和BeautifulSoup库来获取和解析HTML。此外,我们还将使用代理服务器来隐藏我们的IP地址,以避免被目标网站封禁。1.安装必须的库首先,我们需要安装必须的库,包括requests、beauti......
  • 离线安装Python第三方库及依赖包
    1、问题在工作中经常需要在内网环境中安装python第三方库,使用从pypi上下载的whl文件来安装又经常遇到该库也需要依赖包,以至于并不能成功安装。2、解决办法(1)查看所需第三方库安装是否需要依赖库(以requests为例)pipshowrequests(2)使用命令将库及依赖包下载到本地(以requests为......
  • ​python爬虫——爬取天气预报信息
    在本文中,我们将学习如何使用代理IP爬取天气预报信息。我们将使用Python编写程序,并使用requests和BeautifulSoup库来获取和解析HTML。此外,我们还将使用代理服务器来隐藏我们的IP地址,以避免被目标网站封禁。1.安装必须的库首先,我们需要安装必须的库,包括requests、beaut......
  • python重采样tif影像,自定义空间分辨率
    importwarningsimportnetCDF4warnings.filterwarnings('ignore')warnings.filterwarnings('ignore',category=DeprecationWarning)importnetCDF4importpandasaspdimportnumpyasnpfromosgeoimportgdalimportmatplotlib.pyplotasp......