Scrapy下载图片(下,图片中文字识别)

本文涉及的产品
个人证照识别,个人证照识别 200次/月
车辆物流识别,车辆物流识别 200次/月
自定义KV模板,自定义KV模板 500次/账号
简介: 这里增加应用场景,让图片下载结合自动识别,实现识别转换图片中的电话号码。背景在爬取广西人才网的过程当中,发现广西人才网企业联系电话那里不是str,而是将电话生成了一张图片,遇到这种情况,通常有三种不同的处理办法:将图片地址保存下来,只存url...

这里增加应用场景,让图片下载结合自动识别,实现识别转换图片中的电话号码。

背景

在爬取广西人才网的过程当中,发现广西人才网企业联系电话那里不是str,而是将电话生成了一张图片,遇到这种情况,通常有三种不同的处理办法:

  • 将图片地址保存下来,只存url
  • 将图片下载到本地,存储url和本地路径path
  • 将图片下载到本地,存储url和本地路径,然后用图片识别的方式将电话识别出来,赋给tel字段存入数据库

图片文字识别

这里先做图片识别的功能,在github上有个pytesseract包,通过pip安装:

pip install pytesseract

(当然了,前提是我之前安装过pillow包,要不然这里还是要安装pillow的)

然后项目目录下新建一个文件imagetestpy,代码如下:

from PIL import Image
import pytesseract

codes = pytesseract.image_to_string(Image.open('test.jpg'))
print(codes)

保存运行即可看到它能够正常识别出图片中的电话号码。


结合到项目中

广西人才网的项目逻辑是:

spider获取电话图片-->交给item进行序列化-->配置图片下载将电话号码图片下载到本地-->通过pytesseract识别本地图片-->将识别出来的电话号码装在到item["tel"]中,完成。

所以spider里面不用获取tel的值,只需要获取图片url就行,代码为:

loaders.add_css("image_urls", ".address tr:first-child img::attr(src)")

在item中定义好tel字段和path字段:

comp_tel = scrapy.Field()
image_path = scrapy.Field()

接着根据上一篇文章配置图片下载,settings:

ITEM_PIPELINES = {
    #'scrapy.contrib.pipeline.images.ImagesPipeline': 1,
    'rspider.pipelines.ImagePathPipeline': 1,# 开启图片下载
}

""" 图片下载配置 """
IMAGES_URLS_FIELD = "image_urls"  # 对应item里面设定的字段,取到图片的url
prodir = os.path.abspath(os.path.dirname(__file__))
IMAGES_STORE = os.path.join(prodir,"images")  # 设置图片保存path

到pipelisne.py中编写新的ImagesPipeline,通过重载item_completed获得图片下载路径,然后自定义get_img_tel方法来识别图片中的号码,将识别出来的号码传递给item["comp_tel"],将下载路径也传递给item["image_path"],整个类的代码为:

from scrapy.pipelines.images import ImagesPipeline
from PIL import Image
import pytesseract
import os


class ImagePathPipeline(ImagesPipeline):
    """
    继承ImagesPipeline,重载item_completed方法
        以实现处理图片下载路径的目的
    """
    def get_img_tel(self,image_path):
        """
        获取广西人才网图像中的电话号码
            下载存储人才网企业联系电话的图片
            将图片path传进来,通过pytesseract进行解析
            由于代码存在些许问题,数字0会识别为u,所以识别后要进行replace替换
            返回结果
        """
        prodir = os.path.abspath(os.path.dirname(__file__))
        url_path = os.path.join(prodir, "images/") + image_path # 设置图片保存path
        tel_nums = pytesseract.image_to_string(Image.open(url_path))
        return tel_nums

    def item_completed(self, results, item, info):
        """ 循环results,将里面的path取出,然后赋值到item中的image_path字段,最后返回item """
        for ok, value in results:
            image_path = value["path"]
        item["image_path"] = image_path
        item["comp_tel"] = self.get_img_tel(image_path)
        return item

这样即可完成从图片下载到识别号码再传值回来的功能

目录
相关文章
|
10天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
61 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
26天前
|
编解码 文字识别 自然语言处理
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
### 简介 【批量识别图片内容重命名】工具可批量识别图片中的文字并重命名文件,方便高效处理大量图片。然而,OCR 技术面临字符识别错误(如形近字混淆、生僻字识别不佳)、格式错误(段落错乱、换行问题)和语义理解错误等挑战。为提高准确性,建议提升图片质量、选择合适的 OCR 软件及参数,并结合自动校对与人工审核,确保最终文本的正确性和完整性。
98 12
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
|
6月前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
318 2
|
7月前
|
存储 文字识别
印刷文字识别使用问题之处理超过40M的图片时,不返回结果是什么原因
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
人工智能 文字识别 开发工具
印刷文字识别使用问题之是否支持识别并返回文字在图片中的位置信息
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
7月前
|
文字识别 API 数据处理
印刷文字识别使用问题之对于带钢印的VIN图片如何提高识别准确率
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
存储 文字识别 算法
印刷文字识别使用问题之电商图片文字识别是否支持一次调用识别多张图片
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
文字识别 专有云 atlas
印刷文字识别使用问题之是否支持对比两个图片的准确度
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
文字识别
【提取翻译竖排文字日文图片的软件】竖排的日语图片文字识别翻译,竖排的日语图片文字如何识别,竖排日语图片识别后转横排,竖排的日语识别比较友好的方法
这款软件专攻竖排日语图片文字识别,支持自动横排转换,能准确提取左右排版文字,并翻译成中文。用户可从百度网盘或腾讯云盘下载。功能包括图片打开、拖拽识别、截屏拾取、顺序识别、文字导出、快捷搜索及窗体操作。识别时注意保持文字等高以减少误差。附带视频教程(BV1vW4y1p7st)帮助快速上手。
743 0

热门文章

最新文章