python3.3教程之模拟百度登陆

模拟百度的登陆,开发环境使用了python3。

代码:
#-*-coding:utf-8-*-
'''
Created on 2014年1月10日
@author: hhdys
@edit: www.jbxue.com
'''
import urllib.request,http.cookiejar,re
class Baidu:
def login(self):
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')]
resp=opener.open('http://weigou.baidu.com/')
for c in cj:
print(c.name,"====",c.value)
getapiUrl = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true"
resp2=opener.open(getapiUrl)
getapiRespHtml = resp2.read().decode("utf-8")
foundTokenVal = re.search("bdPass\.api\.params\.login_token='(?P<tokenVal>\w+)';", getapiRespHtml)
if foundTokenVal :
tokenVal = foundTokenVal.group("tokenVal")
print(tokenVal)

staticpage = "http://zhixin.baidu.com/Jump/index?module=onesite"
baiduMainLoginUrl = "https://passport.baidu.com/v2/api/?login"
postDict = {
'charset':"utf-8",
'token':tokenVal,
'isPhone':"false",
'index':"0",
'staticpage': staticpage,
'loginType': "1",
'tpl': "mn",
'callback': "parent.bd__pcbs__n1a3bg",
'username':"*****", #用户名
'password':"*****", #密码
'mem_pass':"on",
"apiver":"v3",
"logintype":"basicLogin"
}
postData = urllib.parse.urlencode(postDict);
postData = postData.encode('utf-8')
resp3=opener.open(baiduMainLoginUrl,data=postData)
for c in cj:
print(c.name,"="*6,c.value)


if __name__=="__main__":
print("="*10,"开始")
bd=Baidu()
bd.login()
在进行百度账号的模拟登录时,主要涉及使用 Python 的 `requests` 库发送 POST 请求、处理 Cookie 和 Session 以维持登录状态[^1]。百度作为大型网站,其登录机制较为复杂,通常包含加密参数、验证码识别、以及反爬虫机制。以下将从多个方面解析如何实现百度账号的模拟登录。 ### 3.1 百度登录流程分析 百度登录通常涉及以下步骤: 1. **访问登录页面获取初始 Cookie 和 Token** 访问百度登录页面(如 `https://www.baidu.com/` 或 `https://passport.baidu.com/v2/?login`),可以获取初始 Cookie 和可能的 Token 值,如 `BAIDUID`、`PSTM` 等。 2. **提交登录表单并发送 POST 请求** 登录表单通常包含用户名、密码、加密后的 token、验证码等字段。其中密码通常使用 JavaScript 加密(如 RSA 或自定义算法)[^2]。 3. **处理验证码** 百度可能会弹出验证码(如滑块、图片识别),需要额外处理(如 OCR 或第三方识别服务)。 4. **维持登录状态(Session 和 Cookie)** 成功登录后,服务器会返回新的 Cookie 和 Session,后续请求需携带这些信息以维持登录状态[^3]。 ### 3.2 使用 requests 实现模拟登录 以下是一个简化版的示例,展示如何使用 `requests` 发送 POST 请求并处理 Cookie: ```python import requests # 登录 URL(需通过实际抓包获取) login_url = &#39;https://passport.baidu.com/v2/api/?login&#39; # 登录数据(需根据实际请求构造,可能包含加密字段) login_data = { &#39;username&#39;: &#39;your_username&#39;, &#39;password&#39;: &#39;your_password&#39;, &#39;token&#39;: &#39;xxxxxx&#39;, # 通常通过 JS 获取 &#39;tpl&#39;: &#39;mn&#39;, &#39;withVerify&#39;: &#39;0&#39; } # 创建会话对象以保持 Cookie session = requests.Session() # 发送登录请求 response = session.post(login_url, data=login_data) # 查看响应内容(用于调试) print(response.text) # 获取当前会话的 Cookie cookies = session.cookies.get_dict() print(cookies) ``` ### 3.3 Cookie 的处理与转换 在某些情况下,可能需要将浏览器中复制的 Cookie 字符串转换为字典格式以便在 `requests` 中使用: ```python cookies_str = "BDUSS=xxxxxxxxx; PSTM=1234567890; ..." # 将 Cookie 字符串转换为字典 cookies_dict = {i.split("=", 1)[0]: i.split("=", 1)[1] for i in cookies_str.split("; ")} # 使用 Cookie 发送请求 response = requests.get(&#39;https://www.baidu.com&#39;, cookies=cookies_dict) ``` ### 3.4 登录参数的加密处理 百度登录时,密码通常不会明文传输,而是经过加密处理。常见的加密方式包括: - **RSA 加密**:使用公钥对密码加密。 - **Token 加密**:结合时间戳、随机数等生成加密字段。 - **动态 Token**:每次登录生成不同的 token 值,需通过 JS 模拟或逆向工程获取。 为了处理这些加密逻辑,可以: - 使用 `selenium` 模拟浏览器行为,自动执行 JS。 - 使用 `execjs` 或 `Pyppeteer` 执行 JavaScript 代码。 - 逆向分析百度登录接口,手动实现加密算法。 ### 3.5 验证码识别 百度登录过程中可能会出现验证码,常见类型包括: - 滑块验证码 - 图像识别验证码 - 点击验证码 处理方式包括: - 使用第三方 OCR 服务(如云打码、打码平台) - 使用深度学习模型训练验证码识别器 - 使用无头浏览器模拟人工操作 ### 3.6 注意事项 - **反爬机制**:百度对爬虫有较强的检测机制,频繁登录可能触发封禁。 - **动态参数**:登录参数(如 token)可能动态变化,需实时获取。 - **Cookie 有效期**:部分 Cookie 有过期时间,需定期更新。 - **HTTPS 证书验证**:建议设置 `verify=True` 以确保安全连接。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值