Python中如何实现使用账号密码登录百度?

如题,感觉 token 那一块比较复杂,网上那些开源的项目也大多不可用了。
Python中如何实现使用账号密码登录百度?

8 回复

200,给你弄一个


import requests
from urllib.parse import urlencode

def login_baidu(username, password):
    """
    使用账号密码登录百度(模拟登录流程)
    注意:实际百度登录有复杂验证机制,此代码仅演示基本流程
    """
    # 1. 获取登录页面,获取token等必要参数
    session = requests.Session()
    login_url = "https://passport.baidu.com/v2/api/?login"
    
    # 设置请求头模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://www.baidu.com/'
    }
    
    # 2. 实际百度登录需要先获取动态参数(这里简化演示)
    # 通常需要从页面解析token、验证码等参数
    payload = {
        'username': username,
        'password': password,
        'token': '',  # 实际需要从页面获取
        'staticpage': 'https://www.baidu.com/cache/user/html/v3Jump.html',
        'charset': 'UTF-8',
        'tpl': 'mn',
        'subpro': '',
        'apiver': 'v3',
        'tt': '',  # 时间戳
        'codestring': '',  # 验证码(如果需要)
        'isPhone': 'false',
        'safeflg': '0',
        'u': 'https://www.baidu.com/',
        'quick_user': '0',
        'logintype': 'dialogLogin',
        'logLoginType': 'pc_loginDialog',
        'verifycode': '',
        'mem_pass': 'on'
    }
    
    try:
        # 3. 发送登录请求
        response = session.post(login_url, data=payload, headers=headers)
        
        # 4. 检查登录是否成功
        if response.status_code == 200:
            # 实际需要根据返回内容判断,百度返回的是JSON数据
            # 这里只是演示结构
            print("登录请求已发送")
            print(f"状态码: {response.status_code}")
            
            # 可以检查session中是否包含登录凭证
            if 'BDUSS' in session.cookies:
                print("登录成功!获取到BDUSS cookie")
                return session
            else:
                print("登录可能失败,未获取到有效凭证")
                return None
        else:
            print(f"请求失败,状态码: {response.status_code}")
            return None
            
    except Exception as e:
        print(f"登录过程中出错: {e}")
        return None

# 使用示例
if __name__ == "__main__":
    # 注意:实际使用时需要真实的账号密码
    # 由于百度有严格的反爬机制,此代码可能需要调整才能实际使用
    test_session = login_baidu("your_username", "your_password")
    
    if test_session:
        # 测试访问个人中心页面
        test_response = test_session.get("https://www.baidu.com/")
        print("可以继续使用session进行其他请求")

重要说明:

  1. 实际限制:百度有严格的登录保护机制,包括动态token、验证码、行为验证等,直接模拟登录非常困难
  2. 推荐方案:使用Selenium等浏览器自动化工具处理复杂的登录流程
  3. 替代方案:如果只是需要访问百度服务,考虑使用官方API或OAuth授权
  4. 法律合规:确保你的使用方式符合百度服务条款

简单建议: 对于百度这类复杂登录,建议使用浏览器自动化工具或官方API。

300,手把手教代码再送一套微博,一套百度网盘的上传接口。

非常感谢~

有哪位大神或者有相关的文章能分享一下过程吗?感觉很多步骤非内部人士不能够知道啊。

难道只有百度的人才能写百度的爬虫?不觉得可笑吗?

chrome debug 一下,什么都清楚了。

回到顶部