爬虫- tesseract图片识别

基本使用

  • 爬虫有时需要验证才能登录,此时就需将图片翻译成文字。Tesseract可以将图像翻译成文字,即OCR(Optical CharacterRecognition ) ,光学文字识别,Tesseract是⽬前公认的优的开源OCR库。Tesseract具有很⾼的识别度,也具有很⾼的灵活性,他可以通过训练识别任何字体

  • 首先需要下载可执行文件:
    https://github.com/tesseract-ocr/

  • 基本使用:

import pytesseract
from PIL import Image

# 获取拉勾网的验证码
r = requests.get('https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891').content

# 如果获取的图片为base64 编码的则需要解码
# r = base64.b64decode(r['img'])

# 写入本地
with open('img.jpg', 'wb') as f:
    f.write(r)

# 打开图片
image = Image.open('img.jpg')
image.show()

# 初始化tesseract  其中的路径为tesseract安装路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe'

# 设置配置项
config = r'--tessdata-dir "D:\Tesseract-OCR\tessdata"'

# 将图片识别为字符
print(pytesseract.image_to_string(image, lang='eng',config=config))

案例-自如网

import pytesseract
import requests
import re
from bs4 import BeautifulSoup
from PIL import Image


def get_data():
	# 先请求网页,获取基本的数据
    url = 'http://wh.ziroom.com/z/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
    r = requests.get(url, headers).text

    html = BeautifulSoup(r, features='lxml')
    # 查找第一间房子的价格数据
    list_box = html.find('div', attrs={'class': 'Z_list-box'})
    # 获取所有房子的信息item  这里只获取一个
    for item in list_box.find_all('div', attrs={'class': 'item'}):
        break
        
	# 获取偏移量和图片的URI
    nums = item.find_all('span', attrs={'class': 'num'})
    positions = []
    for num in nums:
        position = num.get('style').split(':')[-1][:-2]
        uri = re.search(r'\((.*?)\)', num.get('style').split(':')[1]).group(1)
        positions.append(float(position.strip()))

    return positions, uri


def parse_data(positions, uri):
	# 获取png
    r = requests.get('http:' + uri).content
    with open('img.png', 'wb') as f:
        f.write(r)
	# 读取
    img = Image.open('img.png')
    img.show()

    # 初始化
    pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe'
    # 配置
    config = r'--tessdata-dir "D:\Tesseract-OCR\tessdata"'

    # 识别
    nums = pytesseract.image_to_string(img, lang='eng', config=config).strip()
    # 识别的时候会多一些空格,去掉 
    n = [num for num in nums if num != ' ']
    print(n)

    # 根据偏移量获取价格的数字
    positions = [int(abs(position / 21.4)) for position in positions]
    price = ''
    for p in positions:
        price += n[p]

    print(price)

if __name__ == '__main__':
    p, u = get_data()
    parse_data(p, u)

  • 识别效果不错,如下:
    在这里插入图片描述

参考:https://blog.csdn.net/weixin_45081575/article/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值