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

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

教程所需环境:

最近在学习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(
以下是Python模拟登录豆瓣的代码实现: ```python import requests from bs4 import BeautifulSoup # 登录页面 login_url = 'https://accounts.douban.com/login' # 请求头 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'} # 获取登录页面的html session = requests.session() response = session.get(login_url, headers=headers) html = response.text # 解析html,获取验证码图片地址和登录需要的captcha-id soup = BeautifulSoup(html, 'html.parser') captcha_url = soup.find('img', {'id': 'captcha_image'}).get('src') captcha_id = soup.find('input', {'name': 'captcha-id'}).get('value') # 下载验证码图片 captcha_response = session.get(captcha_url, headers=headers) with open('captcha.jpg', 'wb') as f: f.write(captcha_response.content) # 输入验证码 captcha_solution = input('请输入验证码:') # 构造登录请求参数 data = { 'source': 'index_nav', 'redir': 'https://www.douban.com/', 'form_email': 'your_email', 'form_password': 'your_password', 'captcha-solution': captcha_solution, 'captcha-id': captcha_id, 'login': '登录' } # 发送登录请求 response = session.post(login_url, data=data, headers=headers) # 验证是否登录成功 if response.url == 'https://www.douban.com/': print('登录成功!') else: print('登录失败!') ``` 以上代码实现模拟登录豆瓣的功能,具体实现过程如下: 1. 首先发送GET请求获取登录页面的HTML代码。 2. 解析HTML代码,获取验证码图片地址和登录需要的captcha-id。 3. 下载验证码图片,并手动输入验证码。 4. 构造登录请求参数,包括用户名、密码、验证码等信息。 5. 发送POST请求进行登录。 6. 验证是否登录成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值