开发者社区> 中乘风> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 这里增加应用场景,让图片下载结合自动识别,实现识别转换图片中的电话号码。 背景 在爬取广西人才网的过程当中,发现广西人才网企业联系电话那里不是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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
TF之NN:利用DNN算法(SGD+softmax+cross_entropy)对mnist手写数字图片识别训练集(TF自带函数下载)实现87.4%识别
TF之NN:利用DNN算法(SGD+softmax+cross_entropy)对mnist手写数字图片识别训练集(TF自带函数下载)实现87.4%识别
40 0
Scrapinghub试用报告
实验对象:scrapinghubs 实验目的:通过体验爬虫工具,进一步加深对数据检索的认识 目录 scrapinghubs简介 scrapy cloud试用报告 在Scrapyinghub创建工程 本地配置并连接到Scrapinghub 使用scrapy cloud进行数据爬取 portia试用报告 新建portia工程 选择爬取实体 导入scrapy cloud 总结 1.Scrapinghub简介 scrapinghub首页 *简介 scrapinghub 帮助人们将网站转化为数据。
2005 0
scrapy 教程
scrapy英文文档 : https://doc.scrapy.org/en/1.3/index.html scrapy中文文档:  http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html 内容都是从官方文档整理过来的,只整理一部分,要想深入了解,可以看官方文档 初窥Scrapy         Scrapy
3926 0
Scrapy实战-下载豆瓣图书封面
紧接着再识Scrapy-爬取豆瓣图书,我们打算把每一本图书的封面都爬下来,毕竟下载图片是一件很棒的事。可以凭借这招去搜集各种表情包呢,还可以省了在某榴辛辛苦苦一个一个打开网页的烦恼呢。
732 0
php给图片加文字
在图片上加文字是论坛,博客,新闻网站上最喜欢用的功能,防止盗图。这里看看代码是如何实现的。 首先还是upload_image.php这个文件,注意这里的caption文本框中输入的内容最终会写到图片上面 Here is your p...
614 0
利用javascript和canvas获取UIWebView网页里的图片(不用再下载)
在UIWebView网页里要获取img标签的图片,网上的方法都是通过获取到URL然后自己再下载一遍,耗流量、耗时间、不能通过验证。 这里是利用UIWebView的stringByEvaluatingJavaScriptFromString函数,执行一段js,返回图片数据。
876 0
『精品素材』20套免费的网页小图标素材下载
  在网页设计工作中,图标设计是最耗时的任务之一,但幸运的是网络上有很多慷慨的设计师分享的现成的免费小图标素材包可以下载使用。下面这个列表收集了20套免费的网页小图标,记得分享和推荐啊。 您可能感兴趣的相关文章 10套华丽的Windows8 Metro风格图标 让人爱不释手的13套精美网...
925 0
25套五彩缤纷的矢量网页背景图片素材【免费下载】
  丰富多彩的矢量网页背景图片素材是设计师的宝贝,也是很好的装饰电脑桌面的壁纸。网页背景图片素材有同心圆,彩虹,闪烁的星星,圆点,箭头和云彩等各种形状,五彩缤纷。在网站设计中使用矢量背景和矢量元素是一个新的趋势,越来越多的网页设计师喜欢再网页设计中使用矢量网页背景图片素材。
1250 0
+关注
中乘风
中乘风,生于海南,中国《英雄联盟》电子竞技职业选手,RNG战队上单。 2015年加入RNG战队并帮助队伍获得2017年LPL春季赛亚军、2017年LPL夏季赛亚军、2017年全球总决赛四强、2018年LPL春季赛冠军、2018年MSI季中赛冠军、RNG队伍2018英雄联盟洲际赛冠
27
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载