python爬虫第8天 图像识别与文字处理 避开采集陷阱



将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。

可以 实现 OCR 的底层库并不多,目前很多库都是使用共同的几个底层 OCR 库,或者是在上面 进行定制


OCR库概述

:Pillow 和 Tesseract。
每个库都可以从它们的网站上下载并安装(http://pillow.readthedocs.org/installation.html 和 https://pypi.python.org/pypi/pytesseract),或者用第三方管理器(像 pip)通过“pillow”和 “pytesseract”进行安装。


Pillow

尽管 Pillow 算不上是图像处理功能最全的库,但是它拥有你需要使用的全部功能

我们可以用 Pillow 完成图片的预处理,让机器可以更方便地读取图片。除了这些简单的 事情之外,Pillow 还可以完成许多复杂的图像处理工作。更多的信息,请查看 Pillow 文档 (http://pillow.readthedocs.org/)。


Tesseract

Tesseract 是目前公认最优秀、最精确的开源 OCR 系统

除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体(只 要这些字体的风格保持不变就可以,后面我们会介绍),也可以识别出任何 Unicode 字符

安装Tesseract 


NumPy

NumPy 是一个非常强大的库,具有大量线性代数 以及大规模科学计算的方法。因为 NumPy 可以用数学方法把图片表示成巨大的像素数组, 所以它可以流畅地配合 Tesseract 完成任务。


处理格式规范的文字

通常,格式规范的文字具有以下特点:

• 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体) 

• 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点 

• 排列整齐,没有歪歪斜斜的字 

• 没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘


灰度值 白色为255  黑色为0

使用python的open函数,使用之后需要关闭

在提交给 Tesseract 处理之前,那些带标题的、带有大片空白的图片,或者有其他问题的图 片,都应该做预处理。


从网站图片中抓取文字



读取验证码与训练Tesseract



让网络机器人看起来像人类用户

修改请求头 


时间就是一切 

如果条件允许,尽量为每个页面访问 增加一点儿时间间隔,即使你要增加一行代码:

但是合理控制速度是你不 应该破坏的规则。这不仅是因为过度消耗别人的服务器资源会让你置身于非法境地,而且 你这么做可能会把一个小型网站拖垮甚至下线。拖垮网站是一件不道德的事情:是彻头彻 尾的错误。所以请控制你的采集速度!

常见表单安全措施

隐含输入字段值 

用隐含字段阻止网络数据采集的方式主要有两种。第一种是表单页面上的一个字段可以用 服务器生成的随机变量表示。如果提交时这个值不在表单处理页面上,服务器就有理由认 为这个提交不是从原始表单页面上提交的,而是由一个网络机器人直接提交到表单处理页 面的。绕开这个问题的最佳方法就是,首先采集表单所在页面上生成的随机变量,然后再 提交到表单处理页面。

第二种方式是“蜜罐”(honey pot)。如果表单里包含一个具有普通名称的隐含字段(设置 蜜罐圈套),比如“用户名”(username)或“邮箱地址”(email address),设计不太好的网 络机器人往往不管这个字段是不是对用户可见,直接填写这个字段并向服务器提交,这样 就会中服务器的蜜罐圈套。服务器会把所有隐含字段的真实值(或者与表单提交页面的默 认值不同的值)都忽略,而且填写隐含字段的访问用户也可能被网站封杀

总之,有时检查表单所在的页面十分必要,看看有没有遗漏或弄错一些服务器预先设定好 的隐含字段(蜜罐圈套)。如果你看到一些隐含字段,通常带有较大的随机字符串变量, 那么很可能网络服务器会在表单提交的时候检查它们。另外,还有其他一些检查,用来保 证这些当前生成的表单变量只被使用一次或是最近生成的(这样可以避免变量被简单地存 储到一个程序中反复使用)。


避免蜜罐 

因为 Selenium 可以获取访问页面的内容,所以它可以区分页面上的可见元素与隐含元素。 通过 is_displayed() 可以判断元素在页面上是否可见。


find_elements_by_tag_name 
找多个element的时候要加s
这一组function都得注意这类问题


问题检查表

如果你一直被网站封杀却找不到原因,那么这里有个检查列表,可以 帮你诊断一下问题出在哪里


• 首先,如果你从网络服务器收到的页面是空白的,缺少信息,或其遇到他不符合你预期 的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的 JavaScript 执行有问题。可以看看第 10 章内容。 

• 如果你准备向网站提交表单或发出 POST 请求,记得检查一下页面的内容,看看你想提 交的每个字段是不是都已经填好,而且格式也正确。用 Chrome 浏览器的网络面板(快 捷键 F12 打开开发者控制台,然后点击“Network”即可看到)查看发送到网站的 POST 命令,确认你的每个参数都是正确的。 

• 如果你已经登录网站却不能保持登录状态,或者网站上出现了其他的“登录状态”异常, 请检查你的 cookie。确认在加载每个页面时 cookie 都被正确调用,而且你的 cookie 在 每次发起请求时都发送到了网站上。 

• 如果你在客户端遇到了 HTTP 错误,尤其是 403 禁止访问错误,这可能说明网站已经把 你的 IP 当作机器人了,不再接受你的任何请求。你要么等待你的 IP 地址从网站黑名单 里移除,要么就换个 IP 地址(可以去星巴克上网,或者看看第 14 章的内容)。如果你 确定自己并没有被封杀,那么再检查下面的内容。 


♦ 确认你的爬虫在网站上的速度不是特别快。快速采集是一种恶习,会对网管的服务 器造成沉重的负担,还会让你陷入违法境地,也是 IP 被网站列入黑名单的首要原因。给你的爬虫增加延迟,让它们在夜深人静的时候运行。切记:匆匆忙忙写程序或收 集数据都是拙劣项目管理的表现;应该提前做好计划,避免临阵慌乱

♦ 还有一件必须做的事情:修改你的请求头!有些网站会封杀任何声称自己是爬虫的 访问者。如果你不确定请求头的值怎样才算合适,就用你自己浏览器的请求头吧。 

♦ 确认你没有点击或访问任何人类用户通常不能点击或接入的信息(更多信息请查阅 12.3.2 节)。 

♦ 如果你用了一大堆复杂的手段才接入网站,考虑联系一下网管吧,告诉他们你的目的。 试试发邮件到 webmaster@< 域名 > 或 admin@< 域名 >,请求网管允许你使用爬虫采 集数据。管理员也是人嘛!

















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值