美文网首页
Python自动更新期刊价格

Python自动更新期刊价格

作者: libdream | 来源:发表于2018-12-26 10:32 被阅读0次

每年要跟邮局订购一批期刊,由于大部分期刊的价格每年都会有小幅度的上涨,每年在比对价格的时候弄的头昏眼花,既然咱入了Python的坑,那何不让Python来帮忙做这些事呢。开始尝试吧!

大致思路:

(1)通过文字识别录入最新的期刊名和价格,保存在csv文件中。

(2)通过比对往年的期刊名,匹配成功的,更新最新的期刊价格,匹配失败的,输出具体期刊名,提示“未找到该期刊”。

下面开始具体操作:

(1)文字识别录入数据

首先,我用手机把纸质报刊订阅清单一张张拍照,然后拷到电脑里。在这里,拍照有个技巧,可以用一张白纸盖住,然后把需要识别信息的地方挖个洞,这样就可以事先过滤掉大部分的无用信息,为后面写代码提供了遍历。如图:

image

图片拷到电脑后,给图片重新命名为'1.jpg'、‘2.jpg’...,这样做也是为了方便后面写代码。如果图片很多可以用图片重命名软件批量重命名。

重命名好图片后就要考虑开始文字识别了,我采用的是百度的文字识别API,网址:http://ai.baidu.com/tech/ocr。为什么用它?因为简单易用,识别准确。

建一个文件getOcrData.py,将识别的数据保存在csv文件中。具体代码如下:

from aip import AipOcr
import re,csv
import openpyxl

APP_ID = '14830***'
API_KEY = 'zZwpvc6H5z9qGic8g5AK****'
SECRET_KEY = 'FsWu8msV8U8zIpEHXACuZWC5GT1*****'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)    #连接baidu文字识别API
f = open('qikan.csv','wt',newline='',encoding='UTF-8')
writer = csv.writer(f)

pic_urls = ['pic/{}.jpg'.format(str(i)) for i in range(1,31)]    #构造待识别图片url列表

title = []
price = []

for pic_url in pic_urls:
    item = open(pic_url, 'rb')   #以二进制读取图片
    img = item.read()

    message = client.basicGeneral(img)

    for i in message.get('words_result'):
        word = i.get('words')
        
        if word[-1].isdigit(): #判断是否是价格,这里偷懒判断最后1位是否为数字来判定
            price.append(word)
        else:
            title.append(word)

    data = dict(zip(title,price))   #将识别的数据以题名为键,以价格为值保存在字典中
print('共识别{}条数据\n'.format(len(data)))

for title, price in data.items():
    writer.writerow((title,price))

f.close()    

保存文件,运行,得到如下图结果:

image

(2)首次尝试更新期刊价格

有了期刊的价格后,下面就要更新期刊价格了,为什么说是首次尝试呢?因为百度文字识别虽说准确率较高,但也达不到100%,总归有点小问题,第一次尝试更新期刊价格的目的就是要找到哪些地方还存在问题,然后去手动修改一下。新建updatePrice.py,更新期刊价格的代码如下:

import re,csv
import openpyxl

wb = openpyxl.load_workbook('test.xlsx')    #加载excel工作簿
sheet = wb.active   #激活主工作表

data = {}
csv_file = csv.reader(open('qikan.csv', 'r'))
for li in csv_file:
    data[li[0]] = li[1]     #读取csv,并将数据转为字典格式
    
for row_num in range(117, sheet.max_row):    #遍历excel
    name = sheet.cell(row=row_num, column=4).value
    try:
        if name in data:
            sheet.cell(row=row_num,column=7).value = data[name] #更新数据
            print('已更新         ' + name)
        else:
            print('未找到 '+ name)
    except TypeError:
        pass

wb.save('test.xlsx')

代码很简单,写好后保存,运行,发现有不少未找到的期刊,手工打开excel文件和csv文件,找出未找到的期刊名,如果是识别有问题,则手动改回正确的,全部改好后,保存文件,再次运行一遍updatePrice.py,搞定!

image

相关文章

网友评论

      本文标题:Python自动更新期刊价格

      本文链接:https://www.haomeiwen.com/subject/emnclqtx.html