iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫爬验证码实现功能详解
  • 836
分享到

Python爬虫爬验证码实现功能详解

爬虫验证码详解 2022-06-04 19:06:57 836人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

主要实现功能: - 登陆网页 - 动态等待网页加载 - 验证码下载 很早就有一个想法,就是自动按照脚本执行一个功能,节省大量的人力——个人比较懒。花了几天写了写,本着想完成验证码的识别,从根本上解决问

主要实现功能:

- 登陆网页

- 动态等待网页加载

- 验证码下载

很早就有一个想法,就是自动按照脚本执行一个功能,节省大量的人力——个人比较懒。花了几天写了写,本着想完成验证码的识别,从根本上解决问题,只是难度太高,识别的准确率又太低,计划再次告一段落。
希望这次经历可以与大家进行分享和交流。

Python打开浏览器

相比与自带的urllib2模块,操作比较麻烦,针对于一部分网页还需要对cookie进行保存,很不方便。于是,我这里使用的是python2.7下的selenium模块进行网页上的操作。

测试网页Http://graduate.buct.edu.cn

打开网页:(需下载chromedriver)

为了支持中文字符输出,我们需要调用sys模块,把默认编码改为 UTF-8


<code class="hljs Python">from selenium.WEBdriver.support.ui import Select, WebDriverWait
from selenium import webdriver
from selenium import common
from PIL import Image
import pytesser
import sys
reload(sys)
sys.setdefaultencoding('utf8')
broswer = webdriver.Chrome()
broswer.maximize_window()
username = 'test'
passWord = 'test'
url = 'http://graduate.buct.edu.cn'
broswer.get(url)</code>

等待网页加载完毕

使用的是selenium中的WebDriverWait,上面的代码中已经加载


<code class="hljs livecodeserver">url = 'http://graduate.buct.edu.cn'
broswer.get(url)
wait = WebDriverWait(webdriver,5) #设置超时时间5s
# 在这里输入表单填写并加载的代码
elm = wait.until(lambda webdriver: broswer.find_element_by_xpath(xpathMenuCheck))</code>

元素定位、字符输入

接下来我们需要进行登录操作:这里我使用的是Chrome,右键选择需要进行填写内容的部分,选择检查,会自动转跳到 F12下的开发者模式(全程需要这个功能来找到相关的资源)。

查看图片

vczKprbLJnJkcXVvO9Gh1PHT0LnYtcSyv7fWPGJyIC8+DQo8aW1nIGFsdD0="这里写图片描述" src="http://www.lsjlt.com/uploadfile/Collfiles/20160414/20160414092144893.png" title="" />

这里我们看到有一个value = “1”,考虑到下拉框的属性,我们只要想办法把这个value赋值给UserRole就好了。
这里使用的是通过selenium的Select模块来进行选择,定位控件使用 find_element_by_**,能一一对应,很方便。


<code class="hljs sql">select = Select(broswer.find_element_by_id('UserRole'))
select.select_by_value('2')
name = broswer.find_element_by_id('username')
name.send_keys(username)
pswd = broswer.find_element_by_id('password')
pswd.send_keys(password)
btnlg = broswer.find_element_by_id('btnLogin')
btnlg.click()</code>

这是用脚本自动填充完的效果,之后就会转跳到下一页。

查看图片

这里,我需要的是功能是自动对学术报告进行报名

查看图片

对需要已有的报告右键即可发现和这个活动有关的消息,因现在没有报告,所以只显示了标题,但对于后面的有效报告识别有相似的地方。

查看图片

对于元素的定位,我优先选择了 xpath,根据测试,可以唯一定位一个元素的位置,很好用。


<code class="hljs perl">//*[@id="dgData00"]/tbody/tr/td[2] (前面是xpath)</code>

查看图片

爬取信息

接下来我们要进行的步骤是爬取现有的有效报告:


<code class="hljs axapta"># 寻找有效报告
flag = 1
count = 2
count_valid = 0
while flag:
  try:
    cateGory = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(count) + ']/td[1]').text
    count += 1
  except common.exceptions.NoSuchElementException:
    break
# 获取报告信息
flag = 1
for currentLecture in range(2, count):
  # 类别
  category = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(currentLecture) + ']/td[1]').text
  # 名称
  name = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(currentLecture) + ']/td[2]').text
  # 单位
  unitsPublish = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(currentLecture) + ']/td[3]').text
  # 开始时间
  startTime = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(currentLecture) + ']/td[4]').text
  # 截止时间
  endTime = broswer.find_element_by_xpath('//*[@id="dgData00"]/tbody/tr[' + str(currentLecture) + ']/td[5]').text</code>

爬取验证码

查看图片

对网页中的验证码进行元素审查后,我们发现了其中的一个一个链接,是 IdentifyinGCode.apsx,后面我们就对这个页面进行加载,并批量获取验证码。

查看图片

爬取的思路是用selenium截取当前页面(仅显示部分),并保存到本地——需要翻页并截取特定位置的请研究:

broswer.set_window_position(**)相关函数;然后人工进行验证码的定位,通过PIL模块进行截取并保存。

最后调用谷歌在Python下的pytesser进行字符识别,但这个网站的验证码有很多的干扰,外加字符旋转,仅仅能识别其中的一部分字符。


<code class="hljs livecodeserver"># 获取验证码并验证(仅仅一幅)
authCodeURL = broswer.find_element_by_xpath('//*[@id="Table2"]/tbody/tr[2]/td/p/img').get_attribute('src') # 获取验证码地址
broswer.get(authCodeURL)
broswer.save_screenshot('text.png')
rangle = (0, 0, 64, 28)
i = Image.open('text.png')
frame4 = i.crop(rangle)
frame4.save('authcode.png')
qq = Image.open('authcode.png')
text = pytesser.image_to_string(qq).strip()</code>
<code class="hljs axapta"># 批量获取验证码
authCodeURL = broswer.find_element_by_xpath('//*[@id="Table2"]/tbody/tr[2]/td/p/img').get_attribute('src') # 获取验证码地址
# 获取学习样本
for count in range(10):
  broswer.get(authCodeURL)
  broswer.save_screenshot('text.png')
  rangle = (1, 1, 62, 27)
  i = Image.open('text.png')
  frame4 = i.crop(rangle)
  frame4.save('authcode' + str(count) + '.png')
  print 'count:' + str(count)
  broswer.refresh()
broswer.quit()</code>

爬取下来的验证码

查看图片

一部分验证码原图:查看图片 查看图片 查看图片 查看图片

从上面的验证码看出,字符是带旋转的,而且因为旋转造成的重叠对于后续的识别也有很大的影响。我曾尝试过使用神经网络进行训练,但因没有进行特征向量的提取,准确率低得离谱。

关于python爬虫爬验证码实现功能详解就给大家介绍到这里,希望对大家有所帮助!

--结束END--

本文标题: Python爬虫爬验证码实现功能详解

本文链接: https://www.lsjlt.com/news/15054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python爬虫模拟登录之图片验证码实现详解
    我们在用爬虫对门户网站进行模拟登录是总会有输入图片验证码的,例如这种 那我们怎么解决这个问题实现全自动的模拟登录呢?只要思想不滑坡,办法总比困难多。我这里使用的是百度智能云里面的文...
    99+
    2024-04-02
  • Python爬虫怎么破解滑块验证码
    这篇文章主要介绍“Python爬虫怎么破解滑块验证码”,在日常操作中,相信很多人在Python爬虫怎么破解滑块验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python爬虫怎么破解滑块验证码”的疑惑有所...
    99+
    2023-06-20
  • 爬虫Python验证码识别入门
    目录爬虫Python验证码识别 1、批量下载验证码图片2、识别代码看看效果 3、折腾降噪、去干扰爬虫Python验证码识别 前言: 二值化、普通降噪、8邻域降...
    99+
    2024-04-02
  • 使用python爬虫怎么实现一个发送短信验证码功能
    本篇文章为大家展示了使用python爬虫怎么实现一个发送短信验证码功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内联代码片。import timedef get_time()...
    99+
    2023-06-06
  • 怎么用Python爬虫破解滑动验证码
    这篇文章给大家分享的是有关怎么用Python爬虫破解滑动验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型...
    99+
    2023-06-14
  • Python爬虫之超级鹰验证码应用
    目录超级鹰平台基础使用剪切验证码超级鹰平台 验证码的破解可以有以下方式: 简单的数字字母组合可以使用图像识别(python 现成模块),成功率不高使用第三方打码平台(破解验证码平台)...
    99+
    2024-04-02
  • Python反爬机制-验证码功能的具体实现过程
    目录识别验证码1.字符验证码1.1OCR环境1.2下载验证码图片1.3识别验证码2.第三方验证码识别3.滑动拼图验证码识别验证码 ​ OCR(Optical Character Re...
    99+
    2024-04-02
  • Python爬虫教程:200行代码实现一个滑动验证码
    Python爬虫教程:教你用200行代码实现一个滑动验证码做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码的原理以及带大家实现一个...
    99+
    2023-06-02
  • 用Python爬虫破解滑动验证码的案例解析
    做爬虫总会遇到各种各样的反爬限制,反爬的第一道防线往往在登录就出现了,为了限制爬虫自动登录,各家使出了浑身解数,所谓道高一尺魔高一丈。 今天分享个如何简单处理滑动图片的验证码的案例。...
    99+
    2024-04-02
  • python PyQt5 爬虫实现代码
    搞一个图形化界面还是挺酷的,是吧 安装库什么的应该不用多说了吧。。 一般来说会让你把 designer.exe(编辑图形化界面的东西,跟vb差不多) 当作外部工具导入到 pychar...
    99+
    2024-04-02
  • python实现简单爬虫--爬图片
    首先有两个功能需求:第一:获取到要爬的页面html内容;第二:使用正则表达式进行匹配并进行保存到本地。#!/usr/bin/env python #encoding:utf-8 import urllib import re def get...
    99+
    2023-01-31
    爬虫 简单 图片
  • 如何在PHP中实现爬虫功能
    在互联网时代,信息获取已经成为人们日常生活中的重要部分。然而,与此同时,人们也需要处理大量的信息以提取重要的数据。这就促使出现了“爬虫”这个概念。爬虫,又称网络蜘蛛,是一种按照特定规则自动获取网页信息的程序。在PHP中,实现爬虫功能可以采用...
    99+
    2023-05-20
    PHP 爬虫 实现
  • Python爬虫遇到验证码的处理方式有哪些
    这篇文章主要介绍“Python爬虫遇到验证码的处理方式有哪些”,在日常操作中,相信很多人在Python爬虫遇到验证码的处理方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python爬虫遇到验证码的处...
    99+
    2023-06-16
  • SpringBoot实现滑块验证码验证登陆校验功能详解
    目录前言一、实现效果二、实现思路三、实现步骤1. 后端 java 代码1.1 新建一个拼图验证码类1.2 新建一个拼图验证码工具类1.3 新建一个 service 类1.4 新建一个...
    99+
    2024-04-02
  • Python爬虫和反爬技术过程详解
    目录一、浏览器模拟(Headers)如何找到浏览器信息打开浏览器,按F12(或者鼠标右键+检查)点击如下图所示的Network按钮按键盘Ctrl+R(MAC:Command+R)进行...
    99+
    2024-04-02
  • Python爬虫的两套解析方法和四种爬虫实现
    【本文转载自微信公众号:数据科学家养成记,作者:louwill,转载授权请联系原作者】 对于大多数朋友而言,爬虫绝对是学习python的最好的起手和入门方式。因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都...
    99+
    2023-06-02
  • python爬虫selenium模块详解
    目录selenium模块 selenium基本概念基本使用基于浏览器自动化的操作selenium处理iframe:selenium模拟登陆QQ空间无头浏览器和规避检测selenium...
    99+
    2024-04-02
  • Python爬虫之urllib库详解
    目录一、说明:二、urllib四个模块组成:三、urllib.request1、urlopen函数2、response 响应类型3、Request对象 4、高级请求方式四、urlli...
    99+
    2024-04-02
  • 一文详解Python中的行为验证码验证功能
    目录前言验证类型概述滑动拼图文字点选语序点选字体识别空间推理前言 最近在开发行为验证码,经常触及到关于验证类型的相关内容。但使用起来不太熟练,闲暇之余,总结一下我对行为验证码验证类型...
    99+
    2023-03-09
    Python行为验证码验证功能 Python行为验证码 Python验证码
  • C#实现验证码功能
    本文实例为大家分享了C#实现验证码功能的具体代码,供大家参考,具体内容如下 分析 需要四个字符(字母(大小写)+数字) 将四个字符连接成字符串 将连接的字符...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作