利用Python通過(guò)商品條形碼查詢商品信息的實(shí)現(xiàn)示例
提前說(shuō)明,由于博文重在講解,代碼一體性有一定程度的破壞。如想要省事需要完整代碼請(qǐng)至一下鏈接下載:完整代碼下載
一 商品條形碼
平日大家會(huì)購(gòu)買許許多多的商品,無(wú)論是飲料、食品、藥品、日用品等在商品的包裝上都會(huì)有條形碼。
商品條形碼包括零售商品、非零售商品、物流單元、位置的代碼和條碼標(biāo)識(shí)。我國(guó)采用國(guó)際通用的商品代碼及條碼標(biāo)識(shí)體系,推廣應(yīng)用商品條形碼,建立我國(guó)的商品標(biāo)識(shí)系統(tǒng)。
零售商品是指在零售端通過(guò)POS掃描結(jié)算的商品。其條碼標(biāo)識(shí)由全球貿(mào)易項(xiàng)目代碼(GTIN)及其對(duì)應(yīng)的條碼符號(hào)組成。零售商品的條碼標(biāo)識(shí)主要采用EAN/UPC條碼。一聽啤酒、一瓶洗發(fā)水和一瓶護(hù)發(fā)素的組合包裝都可以作為一項(xiàng)零售商品賣給最終消費(fèi)者。
總的來(lái)講就是每一種在市面流通的商品都會(huì)有屬于自己商品條形碼。

二 查詢商品條形碼的目的
從技術(shù)方面來(lái)講,本次利用Python通過(guò)商品條形碼查詢商品信息是為了練習(xí)爬蟲技術(shù)。
從生活方面來(lái)講,本次項(xiàng)目可以查詢購(gòu)買商品的信息,確保商品來(lái)源與成分可靠。
三 Python實(shí)現(xiàn)
3.1 爬取網(wǎng)站介紹
網(wǎng)站鏈接如下:條形碼查詢網(wǎng)站
網(wǎng)站截圖如下:

可以看到在該網(wǎng)站中輸入某一商品的條形碼,后輸入驗(yàn)證碼。點(diǎn)擊查詢即可查詢到商品信息。以“6901028001915”為例,進(jìn)行一次查詢,截圖如下:

3.2 python代碼實(shí)現(xiàn)
3.2.1 日志模塊
為保存操作記錄在項(xiàng)目中添加日志模塊,代碼如下:
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 查詢模塊
有上面的截圖可以看到,網(wǎng)站查詢需要數(shù)字驗(yàn)證碼驗(yàn)證,因此這里使用ddddocr包來(lái)識(shí)別驗(yàn)證碼。導(dǎo)入相應(yīng)的包:
from logging import fatal import ddddocr import requests import json import os import time import sys from msg_logger import logger
接下來(lái)是項(xiàng)目的主體代碼,整個(gè)操作邏輯代碼注釋中有詳細(xì)講解:
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])
# 創(chuàng)建目錄
def mkdir(path):
# 去除首位空格
path = path.strip()
# 去除尾部 \ 符號(hào)
path = path.rstrip("\\")
# 判斷路徑是否存在
isExists=os.path.exists(path)
# 判斷結(jié)果
if not isExists:
os.makedirs(path)
logger.info(path + ' 創(chuàng)建成功')
return True
else:
# 如果目錄存在則不創(chuàng)建,并提示目錄已存在
logger.info(path + ' 目錄已存在')
return False
# 爬取 "tiaoma.cnaidc.com" 來(lái)查找商品信息
def requestT1(shop_id):
url = 'http://tiaoma.cnaidc.com'
s = requests.session()
# 獲取驗(yàn)證碼
img_data = s.get(url + '/index/verify.html?time=', headers=headers).content
with open('verification_code.png','wb') as v:
v.write(img_data)
# 解驗(yàn)證碼
ocr = ddddocr.DdddOcr()
with open('verification_code.png', 'rb') as f:
img_bytes = f.read()
code = ocr.classification(img_bytes)
logger.info('當(dāng)前驗(yàn)證碼為 ' + code)
# 請(qǐng)求接口參數(shù)
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('訪問(wèn)圖片URL出現(xiàn)錯(cuò)誤!')
if resp_json['msg'] == '驗(yàn)證碼錯(cuò)誤':
requestT1(shop_id)
return resp_json
3.2.3 運(yùn)行結(jié)果
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('商品無(wú)法查詢!')
嘗試運(yùn)行代碼,以“6901028001915”為例,查看運(yùn)行結(jié)果:

可見(jiàn)商品的信息成功查詢出來(lái)。
到此這篇關(guān)于利用Python通過(guò)商品條形碼查詢商品信息的文章就介紹到這了,更多相關(guān)利用Python通過(guò)商品條形碼查詢商品信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyQt5實(shí)現(xiàn)簡(jiǎn)易電子詞典
這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)簡(jiǎn)易電子詞典,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
OpenCV中resize函數(shù)插值算法的實(shí)現(xiàn)過(guò)程(五種)
最新版OpenCV2.4.7中,cv::resize函數(shù)有五種插值算法:最近鄰、雙線性、雙三次、基于像素區(qū)域關(guān)系、蘭索斯插值。感興趣的可以了解一下2021-06-06
Django中Migrate和Makemigrations實(shí)操詳解
這篇文章主要為大家介紹了Django中Migrate和Makemigrations實(shí)操詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Python?xpath,JsonPath,bs4的基本使用
這篇文章主要介紹了Python?xpath,JsonPath,bs4的基本使用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-07-07
Django 導(dǎo)出項(xiàng)目依賴庫(kù)到 requirements.txt過(guò)程解析
這篇文章主要介紹了Django 導(dǎo)出項(xiàng)目依賴庫(kù)到 requirements.txt過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
pandas groupby + unstack的使用說(shuō)明
這篇文章主要介紹了pandas groupby + unstack的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03

