利用Python通过商品条形码查询商品信息

简介: 利用Python通过商品条形码查询商品信息

提前说明,由于博文重在讲解,代码一体性有一定程度的破坏。如想要省事需要完整代码请至一下链接下载:完整代码下载


一 商品条形码


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

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

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

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



二 查询商品条形码的目的


从技术方面来讲,本次利用Python通过商品条形码查询商品信息是为了练习爬虫技术。

从生活方面来讲,本次项目可以查询购买商品的信息,确保商品来源与成分可靠。


三 Python实现


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

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

相关文章
|
22天前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
2月前
|
JSON API 数据格式
洋码头商品 API 示例指南(Python 实现)
洋码头是国内知名跨境电商平台,提供商品搜索、详情、分类等API接口。本文详解了使用Python调用这些API的流程与代码示例,涵盖签名生成、请求处理及常见问题解决方案,适用于构建选品工具、价格监控等跨境电商应用。
|
2月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
24天前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
28天前
|
数据采集 存储 XML
Python爬虫XPath实战:电商商品ID的精准抓取策略
Python爬虫XPath实战:电商商品ID的精准抓取策略
|
2月前
|
测试技术 API 开发者
淘宝关键词搜索商品列表API接入指南(含Python示例)
淘宝关键词搜索商品列表API是淘宝开放平台的核心接口,支持通过关键词检索商品,适用于比价、选品、市场分析等场景。接口提供丰富的筛选与排序功能,返回结构化数据,含商品ID、标题、价格、销量等信息。开发者可使用Python调用,需注意频率限制与错误处理,建议先在沙箱环境测试。
|
1月前
|
算法 程序员 API
电商程序猿开发实录:淘宝商品python(2)
本文分享了开发者在对接淘宝商品详情API过程中的真实经历,涵盖权限申请、签名验证、限流控制、数据解析及消息订阅等关键环节,提供了实用的Python代码示例,帮助开发者高效调用API,提升系统稳定性与数据处理能力。
|
2月前
|
缓存 监控 API
1688平台开放接口实战:如何通过API获取店铺所有商品数据(Python示列)
本文介绍如何通过1688开放平台API接口获取店铺所有商品,涵盖准备工作、接口调用及Python代码实现,适用于商品同步与数据监控场景。
|
1月前
|
机器人 数据安全/隐私保护 Python
淘宝批量发货发布工具, 淘宝批量上传商品软件, 淘宝批量上架软件【python】
使用Selenium实现自动化操作淘宝卖家后台 支持三种核心功能
|
2月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。

热门文章

最新文章

推荐镜像

更多