如何使用 Python 实现模拟登录和爬取有验证码的网站

2023-04-17 00:00:00 验证码 如何使用 模拟
  1. 模拟登录

模拟登录主要是通过发送 POST 请求,将用户名和密码提交到登录接口,并保存登录后的 cookie,后续请求需要使用 cookie 来维持登录状态。

示例代码:

import requests

# 登录接口 URL
login_url = "https://example.com/login"

# 登录请求参数
data = {
    "username": "your_username",
    "password": "your_password"
}

# 发送登录请求,获取 cookie
session = requests.session()
response = session.post(login_url, data=data)
  1. 爬取有验证码的网站

对于有验证码的网站,一般需要先获取验证码,再将验证码与用户名、密码一起提交到登录接口。验证码可以通过解析页面获取,也可以通过 OCR 技术识别。这里以解析页面方式为例演示如何爬取有验证码的网站。

首先需要获取验证码图片地址,然后下载验证码图片并进行识别。

示例代码:

import requests
from PIL import Image
import pytesseract

# 登录页面 URL
login_page_url = "https://example.com/login"

# 获取登录页面 HTML
response = requests.get(login_page_url)
html_content = response.text

# 解析 HTML,获取验证码图片地址
# 这里假设验证码图片地址为 https://example.com/captcha.png
captcha_url = "https://example.com/captcha.png"

# 下载验证码图片
captcha_image = session.get(captcha_url).content

# 将验证码图片保存到本地
with open("captcha.png", "wb") as f:
    f.write(captcha_image)

# 使用 pytesseract 进行识别,获取验证码
captcha_text = pytesseract.image_to_string(Image.open("captcha.png"))

接下来将验证码与用户名、密码一起提交到登录接口即可。注意:有些网站会对过于频繁的登录请求进行限制,需要进行适当的间隔或延时设置。

示例代码:

import time

# 登录接口 URL
login_url = "https://example.com/login"

# 登录请求参数
data = {
    "username": "your_username",
    "password": "your_password",
    "captcha": captcha_text
}

# 发送登录请求,获取 cookie
session = requests.session()
while True:
    response = session.post(login_url, data=data)
    if "登录成功" in response.text:
        break
    else:
        # 登录失败,等待一段时间后重试
        time.sleep(5)

至此,就成功地实现了模拟登录和爬取有验证码的网站。

相关文章