影刀可以模拟人工所见即所得获取到网页上所有数据,通过影刀获取网页上的数据很方便,但是遇到字体加密的网页,影刀获取出来的数据是一个个框。
例如下面这个店铺访客数在网页源码上显示是加密后的字体
用影刀怎么获取到正确的数据?
方案一:字体解密
优点:获取数据准确
缺点:解密难,通用性差
方案二:用影刀网页元素截图,然后用付费OCR进行识别
优点:获取数据准确,通用性强,门槛低
缺点:收费
方案三:用影刀网页元素截图,然后用影刀离线OCR进行识别
优点:免费,数据准确
缺点:为了保证识别准确,需要先对截图图片做一些预处理
下面具体讲讲方案三怎么做
需要识别的图片:
图片大小如下:

不对图片进行处理的识别结果:
对图片进行处理后的识别结果:
对图片处理代码如下:
from PIL import Image
target = Image.open(r'C:\Users\lll\Downloads\付款金额.png')
target = target.convert('RGBA')
img_array = target.load()
width, height = target.size
for x in range(0, width):
for y in range(0, height):
rgb = img_array[x, y]
r = rgb[0]
g = rgb[1]
b = rgb[2]
a = rgb[3]
if r > 0 | g > 0 | b > 0 :
img_array[x, y] = (r, g, b, 0)
r, g, b, a = target.split()
img = Image.new('RGB', (256, 256), (255, 255, 255))
img = img.convert('RGBA')
img.paste(target, (100, 100), mask=a)
img.save(r'C:\Users\lll\Downloads\付款金额1.png')总结一下:
1.如果ocr需求量比较大的话,能用免费的就不用收费的
2.影刀离线ocr还是比较准的,只不过在识别一些比较小的图片(60像素x15像素)就很容易扑街
3.对于这个只用两种颜色的图片,可以突出一种颜色, 对其他颜色做透明处理,再把图片放大,更加适合影刀离线OCR