美文网首页
Scrapy下载图片(下,图片中文字识别)

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

作者: 中乘风 | 来源:发表于2018-07-13 16:43 被阅读0次

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

背景

在爬取广西人才网的过程当中,发现广西人才网企业联系电话那里不是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

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

相关文章

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

    这里增加应用场景,让图片下载结合自动识别,实现识别转换图片中的电话号码。 背景 在爬取广西人才网的过程当中,发现广...

  • scrapy下载图片

    首先看一下爬取的流程: 在一个爬虫里,你抓取一个项目,把其中图片的 URL 放入“image_urls”组内。项目...

  • 2018-07-15

    Scrapy框架学习 - 使用内置的ImagesPipeline下载图片 需求分析 需求:爬取斗鱼主播图片,并下载...

  • scrapy图片下载

    1.图片下载 第一种:正常那个的发起请求,获取图片的二进制文件,保存第二种:自定义图片管道,继承自ImagePip...

  • Scrapy 下载项目图片

    Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它...

  • Scrapy 下载项目图片

    Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它...

  • 图片文字识别,这样操作容易!

    图片文字识别的话需要怎么操作?当文字数据包含在图片中,需要提取图片中文字时,用什么方法可高效地转换图片成文字?转...

  • 文字识别软件(PC and Android 推荐)

    文字识别可以快速地得到我们想要的文字,通过识别软件识别图片中文字。 电脑端软件推荐 ABBYY Fineread...

  • 使用Scrapy爬取百度图片

    最近在做毕业设计,需要从网上下载图片,就研究了一下怎么使用Scrapy来爬取百度图片。任务很简单,拿到图片的url...

  • Python学习八十四天:图片下载

    今天要学习的是图片下载,Scrapy用ImagesPipeline类提供一种方便的方式来下载和存储图片; (1)首...

网友评论

      本文标题:Scrapy下载图片(下,图片中文字识别)

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