Python爬虫 通过Seleium来获取验证码弹窗刷新即出现的网站数据

目录

1、验证码识别的几种常用方法

2、seleium半自动化破解验证码的实现方法

3、seleium配合etree获取当前页面数据并解析

1、验证码识别的几种方法。

        说起图像识别,我们很容易联想到神经网络的图像识别,但对于没有从事人工智能学习的数据采集者而言存在一定难度,而且图像识别有个很大的通病就是识别率再高也未能保证识别完全准确,加上网站数据可能会存在遗漏,这使得验证码识别通常会成为一种干扰,尤其是对于不间断弹出验证码的网站。

        (1)图像识别,解决方法1:使用第tesseract库来解决。

详细安装使用方法见以下两个链接:

tesseract 安装及使用_showgea的博客-CSDN博客_tesseract

tesseract windows环境下安装常见问题及解决_DJh_1的博客-CSDN博客_tesseract安装经常提示错误

        tesseract是通过光学识别来找到对应的文字的,但对应也需要文字清晰,所以需要预处理,但相比于神经网络学习成本更低一些。

识别验证码参考以下链接:

Python Tesseract识别验证码_u011457798的专栏-CSDN博客_tesseract识别验证码

        (2)图像识别,解决方法2:通过第三方来破解验证码,如超级鹰平台:

平台链接:验证码类型与价格表-超级鹰验证码识别

但唯一的缺点就是,平台要收取一定的费用,不过费用也不高,是个值得考虑的方法

         (3)图像识别,解决方法3:人眼识别配合自动化打码,这也是本次我所讲的方法。

优缺点显而易见,需要人工来输入验证码配合seleium的自动获取数据,仅对于验证码量不是很大的网站奏效,若验证码量庞大就不适用了得改用前两种方法,毕竟人是会疲惫的,不过通常爬取起来还是相当方便的,个人比较喜欢用的。

2、seleium半自动化破解验证码的实现方法

        (1)seleium初始化

使用seleium首先要先准备好对应个人浏览器版本的内核,记住版本一定要一致:

推荐使用谷歌浏览器内核,下载链接如下:

http://chromedriver.storage.googleapis.com/index.html

seleium初始化代码:

import source #个人资源
from selenium import webdriver #selenium引入
from time import sleep #时间停留
from lxml import etree #解析数据

bro=webdriver.Chrome(executable_path="./chromedriver.exe") #实例化浏览器对象

        seleium跳到对应的url,此时该网站弹出需要验证的验证码,我们通过url是否跳转来判断是否需要进行数据采集,未跳转则证明验证码还未得到识别,此时我们可以输入对应的验证码,验证码验证通过时会发生跳转,进程检测到跳转以后知道该获取数据了,通过反复输入验证码,完成较多数量的页面数据采集。

        seleium检测页面是否跳转,方法如下:

url=source.BASE_URL+"sec.html?categoryNum=001001&pageIndex={}".format(i)
bro.get(url=url) #打开对应页面
sleep(1)

currentUrl=bro.current_url #得到当前浏览器的url
while currentUrl==url: #比对url是否改变
    sleep(1) #每间隔1秒检测一次
    currentUrl=bro.current_url 

3、seleium配合etree获取当前页面数据并解析

#获取数据
sleep(1)
newPage=bro.window_handles #window_handles获取到浏览器窗口的url的列表
bro.switch_to.window(newPage[0]) #找到对应的url对应的页面,这里即表示当前页面
pageData=bro.page_source #获取当前页面源码数据
tree=etree.HTML(pageData) #实例化etree对象
#解析etree对象即可
li_list=tree.xpath("//ul[@id='infocontent']/li") 
for li in li_list:
    title=li.xpath("./a")[0].text
    date=li.xpath("./span")[0].text
    print(title,date)

上一篇:python数字识别


下一篇:【Python】之Mac使用图片识别pytesseract方法报错