最新豆瓣模拟登陆(python实现)

本文介绍了使用Python模拟登录豆瓣的步骤,包括获取表单数据、处理验证码以及实现模拟登陆。在获取表单数据时,重点讲解了豆瓣登录所需的参数。在验证码识别部分,尝试使用pytesseract库进行自动识别,但效果不佳。最后提供了完整的模拟登录源码,展示如何在成功登录后保存和使用cookie来避免再次输入验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教程所需环境:

最近在学习scrapy的过程中,偶然看到一些模拟登陆的文章,就想自己实现模拟登录知乎,结果知乎刚好更新新版本,对Form data进行了加密,由于本人对js了解甚少,无法获取到知乎对表单数据的加密方式,转而实现豆瓣登录。
1. python 3.x
2. request、lxml、pillow等库

1、从目标网页中获取表单数据

豆瓣登录页:
这里写图片描述

登录豆瓣的请求页分析:
这里写图片描述

 Form data就是我么需要构建的表单数据,从当前登录请求中可以看出豆瓣在传输过程中还是明文传输,并未对表单数据进行加密。表单中各个字段的意义:
source:为固定值,一般为index_nav或者None;
redir:表示登录后加载页面的域名地址;
form_email:你的用户名;
form_password:你的密码;
captcha-solution:验证码信息;
captcha-id:验证码id;
login:固定值,”登录”;
其中,验证码相关captcha-id和captcha-solution在登录界面的源码中都可以提取得到。
这里写图片描述

2、验证码识别部分

  在模拟登陆第一次登录时,往往要进行验证码的识别,验证码识别可以实现手动输入,下次登录直接加载cookie也不会需要进行任何验证码的识别,出于个人兴趣,简单的试验了下通过pytesseract库实现验证码的自动识别,不过效果并不如人意。
  在进行图片处理之前,对验证码进行简单分析:
这里写图片描述
  
- 背景图案颜色与字体颜色差别较大;
- 图片中有较均匀的黑色和白色噪点;
- 只有英文单词,没有数字和符号,且字体有轻微扭曲但无遮盖,字体有白色描边;

  可以通过PS软件将图片放大之后进行rgb分析,将图片二值化,如图:
这里写图片描述
  可以看出背景已经被二值化去掉,需要处理图片中的噪点,在调用pytesseract库中高斯滤波、中值滤波及均值滤波等方法后,发现中值滤波在人的视角上效果较好。
这里写图片描述
源码:

from PIL import Image, ImageFilter
import pytesseract

img = Image.open(
模拟登录豆瓣网站并爬取数据通常涉及以下几个步骤: 1. **准备工具**: - Python环境(如:Python 3.x) - 爬虫库:如requests、BeautifulSoup、selenium等(用于发送HTTP请求、解析HTML) - 可能需要的:验证码识别工具(如tesseract-ocr)如果页面有验证码 2. **获取登录页面信息**: 使用requests.get登录页URL获取登录页面源码,分析登录表单字段,包括用户名、密码输入框和登录按钮等。 3. **构造登录请求**: 构造包含账号和密码的登录数据(通常是以form-data或json格式),比如`{"username": "your_username", "password": "your_password"}`。 4. **模拟登录**: - 如果是简单的HTML表单,直接POST登录数据到登录API。 - 如果有验证码,可能需要用selenium打开浏览器,手动输入验证码后再提交。 5. **设置cookie**: 登录成功后,获取登录后的cookie,这是保持会话状态的关键。 6. **数据抓取**: 使用相同的工具(加上cookie)访问目标数据页面,通过解析返回的HTML获取所需的数据。 7. **保存或处理数据**: 将爬取的数据存储到文件、数据库或者进一步进行清洗、分析。 ```python import requests from bs4 import BeautifulSoup # 需要注意替换为实际的用户信息和请求头 login_url = 'https://accounts.douban.com/login' data = { 'name': 'your_username', 'password': 'your_password', # 根据实际情况检查是否需要填充更多登录字段 } # 发送登录请求 with requests.post(login_url, data=data, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} ) as response: if response.status_code == 200: cookies = response.cookies # 进行数据抓取... soup = BeautifulSoup(response.text, 'html.parser') # 提取数据... else: print('Login failed with status code:', response.status_code) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值