如何使用 Python 实现模拟登录和爬取有验证码的网站
- 模拟登录
模拟登录主要是通过发送 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)
- 爬取有验证码的网站
对于有验证码的网站,一般需要先获取验证码,再将验证码与用户名、密码一起提交到登录接口。验证码可以通过解析页面获取,也可以通过 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)
至此,就成功地实现了模拟登录和爬取有验证码的网站。
相关文章