您的位置:首页 > 编程语言 > Python开发

利用Python进行爬虫及识别验证码

2018-03-24 18:39 519 查看
背景:带大家用selenium模拟人访问网页,并注册登陆账号、输入验证码,最终获取数据。
验证码处理方法:1、利用ocr识别;2、人工识别;3、cnn卷积神经网络,用训练集做一套模型。(观察案例网站的验证码是属于字体较为正规,用ocr识别就够用了。当我们遇到验证码扭曲程度较大时,可做模型识别。)
思路:下载selenium库、浏览器插件 --->下载验证码识别库PIL、图像识别 --->大致了解网页结构 --->动手,获取数据 --->整理数据
学习基础:selenium库、图像识别基础知识

爬虫规则:
1、浏览器:谷歌 64.0.3282.119 (64位)
2、浏览器驱动:Chromedriver(64位)
3、设置驱动路径:需要将谷歌驱动的路径添加到环境变量Path下。(规则1-3可参考此网址教程:)
4、软件:Python3.5
5、运用到的库:selenium、pytesseract、PIL、pytesser3、tesseract
6、图像识别包:tesseract-OCR(需下载)
7、修改pytesseract.py 代码中路径设置,改为OCR.exe位置(必须修改,否则会显示无法找到文件)
案例:登陆前程无忧,搜索相关工作。
--------------------------------------------------------规则设定好后,我们开始吧--------------------------------------------------from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import os
import sys,time
import pytesseract
import pytesser3
from PIL import Image,ImageEnhance
import numpy as np
import pandas as pd打开目标网页browser=webdriver.Chrome()#打开浏览器,也可选择火狐等浏览器
url=r'https://login.51job.com/login.php?lang=c'
browser.get(url)前面步骤可用代码操作,最后人工输入短信验证码.



找到账号和密码填写元素,并输入。phone=browser.find_element_by_id('phone')
phone.send_keys('137****0000')#输入手机号码
userpwd=browser.find_element_by_id('userpwd')
userpwd.send_keys('123456abc')#输入密码
cfmpwd=browser.find_element_by_id('cfmpwd')
cfmpwd.send_keys('123456abc')#输入确认密码输入验证码,并判断验证码是否正确





我们可以发现,当输入错误验证码或没有输入验证码时,value=0,当验证码输入正确,value=1.并且发现一个有趣的事,必须输入4位数网页才能识别验证码是否正确,就是说,如果ocr识别验证码返回4位数以下时,我们需要填充数字直到它是4位数。 value=0
while value==0:
#全屏截图,再从全屏的图片中截取验证码位置
path=r'picture.png'#全屏图片保存路径
browser.get_screenshot_as_file(path)
im=Image.open(path)

#截验证码
box=(518,340,590,375)
web_p=im.crop(box)
path_code=r'code.png'#验证码保存路径
web_p.save(path_code)

#二值化
im=Image.open(path_code)
imgry=im.convert('L')
sharpness=ImageEnhance.Contrast(imgry)
sharp_img=sharpness.enhance(3.5)
#sharp_img.point(lambda x:0 if x<1 else 255,'1')
sharp_img.save(path_code)
#识别验证码,并整理
word_p=pytesseract.image_to_string(sharp_img)
word=''
for i in word_p:
if i !=' ':
word=word+i
else:
continue
if len(word)<4:
word=word+’a’*(4-len(word))
#输入验证码
code_word=browser.find_element_by_name('verifycode')
#input.clear()#如果错误自动清除
input.send_keys(word)

#判断验证码是否正确
value_c=browser.find_element_by_css_selector('#verifycodechked')
#计算输入验证码次数
num=num+1
time.sleep(1)输入手机验证码pass_send=browser.find_element_by_css_selector('#btn7')
pass_send.click()
code_num=input('请输入手机验证码:')
phone_code=browser.find_element_by_css_selector('#phonecode')
phone_code.send_keys(code_num)

#点击注册
submit=browser.find_element_by_css_selector('#submitbtn')
submit.click()
(以上介绍完如何自动化注册,自动识别验证码。爬取信息尚未更完,待续……)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 验证码 Python