利用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()
(以上介绍完如何自动化注册,自动识别验证码。爬取信息尚未更完,待续……)
验证码处理方法: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 利用多线程进行爬虫(一)
- [python和大数据-1]利用爬虫登录知乎进行BFS搜索抓取用户信息本地mysql分析【PART1】
- python利用urlib2进行简单爬虫实例
- [Python]利用Python进行网络爬虫
- 【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览
- python 爬虫利用webdriver 跳过登陆 进行小规模抓取信息
- 鱼c笔记——Python爬虫(一):利用urllib进行简单的网页抓取
- python 利用多进程进行爬虫(二)
- python爬虫(1)利用BeautifulSoup进行网络数据采集
- 关于利用python进行验证码识别的一些设想
- 利用python进行数据分析之——数据规整化1(ETL)
- python:利用asyncio进行快速抓取
- 利用Python进行数据分析——准备工作篇
- 利用python进行数据分析-数据聚合与分组运算1
- 利用python进行数据分析之数据聚合和分组运算
- 利用Python Pandas进行数据预处理-数据清洗
- 利用python进行数据分析ch02(usa.gob)
- [Python爬虫] 之二十五:Selenium +phantomjs 利用 pyquery抓取今日头条网数据
- Python利用公共键如何对字典列表进行排序详解
- 基于Python实现微信公众号爬虫进行数据分析