Python模拟登录百度贴吧

贴上代码,,,基本都有注释,,,

总结下,其实没必要这么麻烦,,直接由浏览器导出cookie就能实现模拟登录了=。=

# -*- coding=utf-8 -*-

import urllib;
import urllib.request;
import json;
import http;
import http.cookiejar;
import re;
import os;
from urllib.parse import urlencode;

TOKEN_URL = "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&callback=parent.bd__pcbs__hl4e6h";
INDEX_URL = "http://www.baidu.com/";
LOGIN_URL = "https://passport.baidu.com/v2/api/?login";

reg_token = re.compile("\"token\"\s+:\s+\"(\w+)\"");

bdHeaders = {
                "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                "Accept-Encoding":"gzip,deflate,sdch",
                "Accept-Language":"zh-CN,zh;q=0.8",
                "Host":"passport.baidu.com",
                "Origin":"http://www.baidu.com",
                "Referer":"http://www.baidu.com/",
                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
             };

bdData = {
            "charset":"UTF-8",
            "token":"",
            "tpl":"mn",                               #重要,需要跟TOKEN_URL中的相同
            "u":"http://tieba.baidu.com/",
            "username":"",
            "password":"",
            "callback":"parent.bd__pcbs__hl4e6h",     #重要,需要跟TOKEN_URL中的相同
          };

class tbLogin:
    def __init__(self):
        self._cookie = http.cookiejar.LWPCookieJar();
        self._opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self._cookie));

    def login(self, user = "", psw = ""):
        if(not os.path.exists("baidu.cookie")):
            self._initial();                         
            self._getToken();                         #取得token,必要

            bdData["username"] = user;
            bdData["password"] = psw;
            bdData["token"] = self._token;

            request = urllib.request.Request(LOGIN_URL, headers = bdHeaders);
            self._opener.open(request, urlencode(bdData).encode("utf-8"));   #登录
            self._cookie.save("baidu.cookie", True, True);        #保存cookie
        else:
            self._cookie.load("baidu.cookie", True, True);        #加载cookie

        result = json.loads(self._opener.open("http://tieba.baidu.com/f/user/json_userinfo").read().decode("utf-8"));
        print(self._opener.open("http://tieba.baidu.com/f/user/json_userinfo").read().decode("utf-8"));
        if(result["no"] == 0):                                    #判断是否登录成功
            return self._opener;
        else:
            return None;


    def _getToken(self):
        self._token = reg_token.findall(self._opener.open(TOKEN_URL).read().decode("gbk"))[0];

    def _initial(self):
        self._opener.open(INDEX_URL);

def main():
    robot = tbLogin();
    #传入用户名和密码
    opener = robot.login("", "");


if __name__ == "__main__":
    main();

登录成功后会返回下面这个东西。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值