Python爬虫-尝试使用人工和OCR处理验证码模拟登入
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我将cookies删除掉果然就有需要验证码了:
分析-01.png
参考了大多数的意见,可以模拟登入移动端,验证码形式是我们常见的字母数字组合,避开这个点击倒立的验证码形式,然后我就在移动端抓包了,可以拿到验证码图片的包,我们可以请求这个URL拿到每次的验证码:
分析-02.png
这个URL的结构是:https://www.zhihu.com/captcha.gif?r=xxx&type=login
分析-03.png
def get_xsrf():
url='https://www.zhihu.com/signin?next=/'
html=session.get(url=url,headers=headers).text
pattern=re.compile('.*?<input type="hidden" name="_xsrf" value="(.*?)"/>', re.S)
_xsrf=re.search(pattern,html).group(1)
if _xsrf:
print('_xsrf获取成功:'+ _xsrf)
return _xsrf
else:
print('_xsrf获取失败')
对于captcha,就是验证码了,在刚开始的时候也提到了,可以请求相应的URL,拿到每次所需的验证码,人工来识别验证码的好处就是准确率高,这里我尝试使用了,人工识别的方法:
验证码图片会下载至项目所在的文件夹,打开图片,输入验证码即可
def get_captcha():
t=int(time.time()*1000)
url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
content=session.get(url=url,headers=headers).content
with open('captcha.jpg','wb') as f:
f.write(content)
im=Image.open('captcha.jpg')
im.show()
time.sleep(5)
im.close()
return input('请输入验证码:')
后面我又尝试使用OCR(Optical Character Recogintion,光学字符识别),所用到的包是pytesseract,看能不能够自动识别,但是显然效果是很差的,在此也记录一下:
def get_captcha():
t=int(time.time()*1000)
url='https://www.zhihu.com/captcha.gif?r='+str(t)+'&type=login'
content=session.get(url=url,headers=headers).content
with open('captcha.jpg','wb') as f:
f.write(content)
im=Image.open('captcha.jpg') #把彩色图像转化成灰度图像
gray=im.convert('L')
gray.show()
threshold=200 #二值化处理
table=[]
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out=gray.point(table,')
out.show()
out.save('captcha_thresholded.jpg')
th=Image.open('captcha_thresholded.jpg') #使用Tesseract进行图片识别
print(pytesseract.image_to_string(th))
return pytesseract.image_to_string(th)
试了几次,OCR识别的结果都是有问题的,结果是这样的:
分析-07.png
Python爬虫-尝试使用人工和OCR处理验证码模拟登入的更多相关文章
- python爬虫_简单使用百度OCR解析验证码
百度技术文档 首先要注册百度云账号: 在首页,找到图像识别,创建应用,选择相应的功能,创建 安装接口模块: pip install baidu-aip 简单识别一: 简单图形验证码: 图片: from ...
- python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)
在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码 ...
- Python爬虫学习笔记之微信宫格验证码的识别(存在问题)
本节我们将介绍新浪微博宫格验证码的识别.微博宫格验证码是一种新型交互式验证码,每个宫格之间会有一条 指示连线,指示了应该的滑动轨迹.我们要按照滑动轨迹依次从起始宫格滑动到终止宫格,才可以完成验证,如 ...
- python爬虫之selenium+打码平台识别验证码
1.常用的打码平台:超级鹰.打码兔等 2.打码平台在识别图形验证码和点触验证码上比较好用 (1)12306点触验证码 from selenium import webdriver from selen ...
- python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。
1.首先分析请求,打开4399网站. 右键检查元素或者F12打开开发者工具.然后找到network选项, 这里最好勾选perserve log 选项,用来保存请求日志.这时我们来先用我们的账号密码登陆 ...
- Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_134 今天有同学提出了一个需求,老板让自动登录这个页面:https://www.dianxiaomi.com/index.htm, ...
- Python爬虫合集:花6k学习爬虫,终于知道爬虫能干嘛了
爬虫Ⅰ:爬虫的基础知识 爬虫的基础知识使用实例.应用技巧.基本知识点总结和需要注意事项 爬虫初始: 爬虫: + Request + Scrapy 数据分析+机器学习 + numpy,pandas,ma ...
- 网络爬虫之requests模块的使用+Github自动登入认证
本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入: 我们先来看如下的例子,初步体验下requests模块的使用: ...
- 爬虫破解知乎登入(不使用Selenium模块)
一.分析 知乎完成登入的步骤 首先获得cookies(如果不获得后面验证码无法获得) 获得验证码 提交登入相关内容 前两步简单稍微细心寻找规律即可 其中最难的是第三步应该他前端进行了js加密 这里没什 ...
随机推荐
- OpenCV——RGB三通道分离
opencv 和 matlab 在处理彩色图像的时候,通道的存储顺序是不同的. matlab 的排列顺序是R,G,B: 而在opencv中,排列顺序是B,G,R. 下面通过一个小程序看看opencv中 ...
- javascript访问html元素的内容(1)
形如如下格式的html元素: <p id="my_p">I'm <strong>BIG</strong> panda!!!</p> ...
- apt-get Ubuntu本地ISO镜像入源
转自http://blog.csdn.net/binchel/article/details/21486999 在没有网络的情况下,本地镜像源不实为一个上等的权宜之计! 目前linux的两大主流包管理 ...
- javascript简单介绍(二)
晨读单词: onmouseover:鼠标移入 onmouseout:鼠标移出 attribute:属性 node:节点 document:文档 element:元素 textNode:文本节点 app ...
- 详解PNG文件结构
前言 PNG,JPEG,GIF,BMP作为数据压缩文件,有许多重要的信息我们需要区深度解析. 一.PNG的文件结构 1.1.数据块构成结构 PNG文件结构很简单,主要有数据块(Chunk Block) ...
- js中用var与不用var的区别
var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable):如果是在全局域中声明,则为全局变量. 而 num = 1: 事实上是对属性赋值操作.
- UML类图中连接线与箭头的含义(转)
UML类图是描述类之间的关系 概念 类(Class):使用三层矩形框表示. 第一层显示类的名称,如果是抽象类,则就用斜体显示. 第二层是字段和属性. 第三层是类的方法. 注意前面的符号,'+'表示pu ...
- 《C++标准程序库》学习笔记(一)C++相关特性
抱着本厚厚的<C++标准库>读了几天,想想也该写点关于用法的总结,一来怕今后容易忘记,二来将书上的事例重新敲一遍,巩固对程序库相关知识的了解.今天开第一篇,以后不固定更新.当然,笔者所读为 ...
- SpringMVC:数据绑定入门(-)
1.数据类型,可以绑定基本数据类型,如int age,或者包装类型如:Integer age; 两者的区别:int 类型时,必填该参数,Integer 可以为空. 2.绑定数组 , 3.绑定对象. 3 ...
- Ocelot中文文档-Websockets
Ocelot额外支持代理websockets.这个功能在问题 212中被提出. 为了是Ocelot代理websocket,你需要做如下事情. 在你的Configure方法中,你要告知应用程序使用Web ...



