- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
拒绝反爬虫!教你搞定爬虫验证码
Python爬虫与数据挖掘
1970-01-01
以下文章来源于数仓瑰宝库 ,作者赵国生,王健 HYPERLINK
数仓瑰宝库
.
共享数据库、大数据、数据仓库等学问
点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
疏影横斜水清浅,暗香浮动月黄昏。
「数仓瑰宝库」,带你学数据!
导读:目前,很多网站实行各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的进展,验证码的花样越来越多。验证码最后是几个数字组合的简约的图形验证码,后来加入了英文字母和混淆曲线。有的网站还可能看到中文字符的验证码,这使得识别愈加困难。
使用验证码可以防止应用或者网站被恶意注册、攻击,对于网站、APP而言,大量的无效注册、反复注册甚至是恶意攻击很令人头痛。使用验证码能够很大程度上削减这些恶意操作。验证码变得越来越简单,爬虫的工作也变得愈加困难。有时候我们必需通过验证码的验证才能够访问页面(如图1所示)。
图1?验证码界面
目前主流的 4 种验证码为输入式验证码、滑动式验证码、宫格式验证码和点击式的图文验证,下面我们来分别讲解它们的处理思路。
4种验证码的处理思路
01 输入式验证码
这种验证码次要是通过用户输入图片中的字母、数字、汉字等进行验证,如图2所示。
图2 输入式验证码
处理思路:这是最简约的一种验证码,只需识别出里面的内容,然后填入输入框中即可。这种识别技术叫OCR,这里推举使用 Python 的第三方库?tesserocr。tesserocr?与?pytesseract?是 Python 的一个 OCR 识别库,但其实是对 Tesseract 做的一层 Python API 封装,pytesseract?是 Google 的 Tesseract-OCR 引擎包装器;所以它们的核心是 Tesseract。对于没有什么背景影响的验证码,直接通过这个库来识别就可以。但是对于有嘈杂的背景的验证码,直接识别的识别率会很低,遇到这种验证码需要先对图片进行灰度化,然后再进行二值化,再去识别,这样识别率会大大提高。
02 滑动式验证码
这种是将备选碎片直线滑动到正确的位置,如图3所示。?
图3 滑动式验证码
处理思路:对于这种验证码就比较简单一点,但也是有相应的方法。我们直接想到的就是模仿人去拖动验证码的行为,点击按钮,然后看到了缺口的位置,最终把拼图拖到缺口位置处完成验证。?
第一步:点击按钮。当没有点击按钮的时候图片中的缺口和拼图是没有消灭的,点击后才消灭,这为我们找到缺口的位置供应了灵感。?
其次步:拖到缺口位置。我们晓得拼图应当拖到缺口处,但是这个距离如何用数值来表 示?通过第一步观看到的现象,我们可以找到缺口的位置。这里我们可以比较两张图的像素, 设置一个基准值,假如某个位置的差值超过了基准值,那我们就找到了这两张图片不一样的位置,当然我们是从那块拼图的右侧开头并且从左到右,找到第一个不一样的位置时就结束,这时的位置应当是缺口的 left,所以我们使用 selenium 拖到这个位置即可。这里还有个疑问,就 是如何能自动保存这两张图?我们可以先找到这个标签,然后猎取它的 location 和 size,接着 是?top = int(location[y])、bottom = int(location[y] + size[height])、left = int(location[x])?以及right = int(location[x] + size[width]),然后截图,最终抠图填入这四个位置就行。具体的使用 可以查看 selenium 文档,点击按钮前抠一张图,点击后再抠一张图。最终拖动时需要模仿人的 行为,先加速然后减速。由于这种验证码有行为特征检测,人是不行能做到一直匀速的,否则 它就判定为是机器在拖动,这样就无法通过验证了。
03 宫格验证码
如图4所示的验证码,爬虫难度比较大,每一次消灭的都不一样,就算消灭一样的,其拖动挨次也不相同。但是,我们发觉不一样的验证码个数是有限的,这里接受模版婚配的方 法,把全部消灭的验证码保存下来,然后挑出不一样的验证码,依据拖动挨次命名。我们从 左到右从上到下,将其分别设为 1、2、3、4。上图的滑动挨次为 4→3→2→1,所以我们命名 4_3_2_1.png。当验证码消灭的时候,用我们保存的图片逐一枚举,与消灭的这种来比较像素, 方法见“滑动式验证码”部分。假如婚配上了,拖动挨次就为 4→3→2→1。然后使用 selenium 模仿即可。
图4?宫格验证码
04 点击式的图文验证和图标选择
1)图文验证:通过文字提示用户点击图中相同字的位置从而进行验证。
2)图标选择:
文档评论(0)