python爬虫-验证码的处理

在爬取网页数据时,经常出现需要登录账户且要输入验证码的情况。

以http://www.santostang.com/wp-login.php?action=register该网页为例,需要先使用浏览器的检查功能找到form表单中的input,具体如下所示:
python爬虫-验证码的处理_第1张图片
由上图可知找到了五个input,分别需要输入的是:用户名、电子邮件、验证码、隐藏值、是否提交。

1、人工方法处理验证码

使用人工方法处理验证码就是在程序运行时弹出验证码的输入框,手动输入验证码,准确性高,但需要守着程序的运行。具体实现步骤如下:

(1)输入相应的验证码

定义get_captcha()函数,从原网页中通过检查功能定位到验证码的信息,获取验证码图片的url,将验证码图片保存至源代码所在的地址(方便后续打开图片);打开图片手动输入图片中的验证码。

def get_captcha():
    #获取验证码图片所在的url
    r = session.get('http://www.santostang.com/wp-login.php?action=register',headers=headers)
    soup = BeautifulSoup(r.text,"lxml")
    captcha_url = soup.find("img",id="captcha_code_img")["src"]
    #获取验证码图片
    r = session.get(captcha_url,headers=headers)
    with open('captcha.jpg','wb') as f:
        f.write(r.content)
        f.close
    try:
        im = Image.open('captcha.jpg')
        im.show()
        im.close()
    except:
        print(u'请到 %s 目录找到chptcha.jpg手动输入' % os.path.abspath('captcha.jpg'))
    captcha = input("please input the captcha\n>")
    return captcha

(2)准备注册上交的表单

使用register()函数将表单中的数据准备好,加上验证码一起,提交POST请求并进行注册。如果输出结果为200,则表示注册成功。

def register(account,email):
    post_url = 'http://www.santostang.com/wp-login.php?action=register'
    postdata = {
        'user_login':account,
        'user_email':email,
        'redirect_to':'',
    }
    #调用get_captcha函数,获取验证码数字
    postdata["ux_txt_captcha_challenge_field"] = get_captcha()
    #提交post请求,进行住粗
    register_page = session.post(post_url,data=postdata,headers=headers)
    #若输出打印结果为200,则表示注册成功
    print(register_page.status_code)

(3)输入用户名和邮箱,调用函数得到结果

import requests
from bs4 import BeautifulSoup
import re
import os
from PIL import Image
if __name__ == '__main__':
    agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46'
    headers = {
        'host':'www.santostang.com',
        'Origin':'http://www.santostang.com',
        'Referer':'http://www.santostang.com/wp-login.php?action=register',
        'User-Agent': agent
    }
    session = requests.session()
    #调用注册函数进行注册
    account = '18341432113'
    email = '[email protected]'
    register(account,email)

最后结果如下图:
在这里插入图片描述
响应状态码为200表示网页注册成功!

2、OCR处理验证码

OCR(Optical Character Recognition光学字符识别)即使用图像识别技术输入验证码。需要安装Tesseract库,将验证码图像转化为灰度图像并进行二值化处理;然后使用Tesseract进行图像识别。由于OCR是自动识别验证码因此会出现识别错误的情况。

你可能感兴趣的:(python网络爬虫,python,爬虫,开发语言)