码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫验证码

时间:2016-12-24 23:11:24      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:flow   过程   stream   随机选择   变化   随机   更改   抓取   char   

我现在使用 phantomJS 截图,然后裁剪得到验证码,再通过Python光学识别获取验证码。

这个过程中遇到 phantomJS 截图大小不一致的问题,我本地的和服务器的图片,验证码的位置不一致。没办法,只好把服务器上的图片 scp 下来,然后更改像素位置。

为什么不直接下载图片下来呢?

每次点击图片,图片都会变化。应该是要将 cookie 和验证码一起提交上去。要验证这个观点,我决定使用 Charles 抓包看这些请求的顺序,并更改 cookie 看下有什么变化。验证码的思路是不是这样的:

给定一个 Cookie: JSESSIONID=031BC3B941D43115B95924C504662637; 然后每次请求验证码,将这个 cookie 与验证码对应起来,如果多次请求,那么验证码以最近的为准,即新验证码会覆盖旧验证码。

 有一个网站验证码地址是这样的,刚打开登录页,验证码地址是

/traffic_web/kaptcha.jpg

重发请求 `/traffic_web/kaptcha.jpg`,验证码图片一直会变。应该是后端随机选择一张图片,然后与 cookie 绑定,再返回给客户端。这样的图片我们要怎么下载呢?应该是以当前的 cookie 访问  `/traffic_web/kaptcha.jpg` 并下载图片,再登录,整个过程中 cookie 应该是同一个

因为一开始图方便就是用了 PhantomJS,大开大合。那现在这种情况要怎么处理呢?使用 session_request,cookie 从 phantomjs 中读取。我做的就是把截图变为下载图片,减少不稳定性。

试了一下,成功登陆。下面是我的代码:

import requests
import shutil


headers = {‘Cookie‘: ‘gsScrollPos=; JSESSIONID=54BE9AF60A0F98B10C0D10F195EAA4F3‘}
# 你们拿别的 url 去试一下,我这个是工作中用到的,不方便公开
url="http://url_to_kaptcha.jpg"

def f():
  # 储存图片到本地 来源 http://stackoverflow.com/questions/13137817/how-to-download-image-using-requests response = session_request.get(url, headers=headers, stream=True) with open(‘img.png‘, ‘wb‘) as out_file: shutil.copyfileobj(response.raw, out_file) del response

f()

  

还可以扩展的是

  1. 使用 GitHub 上别人做好的识别验证码的库,对图片做修建。
  2. 抓取大量验证码图片,使用机器学习提高识别率

我现在因为可以让对方不封 IP,所以也没动力去提高验证码识别率,使用Python的OCR,不做任何配置,只在 Python 代码中检验识别后的验证码去除空格的位数是否合适,一般最多识别10次就能成功登陆。

爬虫验证码

标签:flow   过程   stream   随机选择   变化   随机   更改   抓取   char   

原文地址:http://www.cnblogs.com/jay54520/p/6218610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!