模拟百度空间登录

我的个人博客(
肥龙的博客)发表了新文章了!

欢迎大家过来阅读,以下是文章的连接地址

http://www.comingcode.com/?p=357

由于自己有了个人的博客,但是又想提高点曝光率,所以就想到如何将自己的博客在其他网站曝光多点,当然最恶心的就是到每个网站或论坛上面发广告,这样不但可以增加曝光度,同样也能拉点仇恨。不管出于什么目的,如果是想在各个网站上手动一条条发的话,估计这个人也够忙的了。

学习了python后,就可以实现自动将博客同步到别的网站上了,要做的只是模拟用户登录,然后再发送发表文章的请求。这里我只模拟了百度空间的登录和发布文章操作,其他一些网站的就后续再弄了。

如果要问如何做到一个网站的模拟登录,那么就要知道怎么样获取一下登录操作的数据包,分析后,就用python模拟同样的数据包进行发送就可以了。常用的工具可以是google chrome、firefox等浏览器,又或者使用fiddler这样的专门监控http数据包的工具。总的一句就是,通过人工操作登录,同时使用工具监控发送和接收的数据包内容,通过分析后,就用python模拟同样格式的数据包。

下面就贴出百度空间的模拟登录代码吧

运行环境:python 2.7(3.x的没有测试过),windows or linux

IDE工具:pycharm

# -*- coding:utf-8 -*-
"""
author: Dragon
date: 2015-01-02
"""

import cookielib
import urllib2
import urllib
import re

class BaiduSpace:
    def __init__(self):
        self.cookie = cookielib.LWPCookieJar()
        self.chandle = urllib2.HTTPCookieProcessor(self.cookie)

    #http get操作
    def getData(self, url, headers=None):
        request = None
        if headers is not None:
            request = urllib2.Request(url, headers=headers)
        else:
            request = urllib2.Request(url)

        request = urllib2.Request(url)
        opener = urllib2.build_opener(self.chandle)
        response = opener.open(request)
        data = response.read()
        try:
            data = data.decode(‘utf-8‘)
        except:
            data = data.decode(‘gbk‘,‘ignore‘)
        return data

    #http post操作
    def postData(self, url, data, header):
        data = urllib.urlencode(data);
        req = None
        if header is not None:
            req = urllib2.Request(url,data,headers=header)
        else:
            req = urllib2.Request(url,data)
        opener = urllib2.build_opener(self.chandle)
        response = opener.open(req)
        data = response.read()
        try:
            data = data.decode(‘utf-8‘).encode(‘utf-8‘)
        except:
            data = data.decode(‘gbk‘,‘ignore‘)
        return data

    #登录
    def login(self, name, pwd):
        #第一次先访问一下,目的是为了先保存一个cookie下来
        qurl = ‘https://passport.baidu.com/v2/api/?getapi&class=login&tpl=qing&tangram=false‘
        self.getData(qurl)

        #第二次访问,目的是为了获取token
        qurl = ‘https://passport.baidu.com/v2/api/?getapi&class=login&tpl=qing&tangram=false‘
        rsp = self.getData(qurl)

        login_tokenStr = ‘‘‘bdPass.api.params.login_token=‘(.*?)‘;‘‘‘
        login_tokenObj = re.compile(login_tokenStr,re.DOTALL)
        matched_objs = login_tokenObj.findall(rsp)
        if matched_objs:
            token = matched_objs[0]
            print ‘token =‘, token
            #然后用token模拟登陆
            post_data = {‘username‘:name,
                          ‘password‘:pwd,
                          ‘token‘:token,
                          ‘charset‘:‘UTF-8‘,
                          ‘callback‘:‘parent.bd__pcbs__1vwwr5‘,
                          ‘isPhone‘:‘false‘,
                          ‘mem_pass‘:‘on‘,
                          ‘logintype‘:‘basicLogin‘,
                          ‘logLoginType‘:‘pc_loginBasic‘,
                          ‘safeflg‘:‘0‘,
                          ‘staticpage‘:‘http://hi.baidu.com/com/show/proxy?for=v3_pass_login‘,
                          ‘tpl‘:‘qing‘,
                          ‘u‘:‘http://hi.baidu.com/go/login?from_page=0&from_mod=101‘,
                          ‘apiver‘:‘v3‘,
                          ‘quick_user‘:‘0‘,
                          ‘ppui_logintime‘:‘15118‘
                        }
            path = ‘http://passport.baidu.com/v2/api/?login‘
            headers = {
              "Accept": "image/gif, */*",
              "Referer": "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F",
              "Accept-Language": "zh-cn",
              "Content-Type": "application/x-www-form-urlencoded",
              "Accept-Encoding": "gzip, deflate",
              "User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
              "Host": "passport.baidu.com",
              "Connection": "Keep-Alive",
              "Cache-Control": "no-cache"
            }
            rsp = self.postData(path, post_data,headers)
            return True

        return False

    #创建文章
    def SendBlog(self, title, content, private=0):
        #获取bdstoken
        ret = self.getData(‘http://hi.baidu.com/pub/show/createtext‘);
        index = ret.find(‘https://passport.baidu.com?logout&bdstoken=‘)
        index2 = ret[index+len(‘https://passport.baidu.com?logout&bdstoken=‘):].find(‘&‘)
        if index == -1 or index2 == -1:
            return False

        bdstoken = ret[index+len(‘https://passport.baidu.com?logout&bdstoken=‘):index+len(‘https://passport.baidu.com?logout&bdstoken=‘)+index2]

        #构建发送的数据
        postTextData = {
                    ‘title‘ : title.encode("utf8"),
                    ‘content‘ : content.encode("utf8"),
                    ‘private‘: private,
                    ‘imgnum‘ : 0,
                    ‘bdstoken‘ : bdstoken,
                    ‘refer‘ : ‘http://hi.baidu.com/home‘,
                    ‘private1‘: private,
                    ‘qing_request_source‘: ‘new_request‘
                    }
        headers = {
                  "Accept": "*/*",
                  "Referer": "http://hi.baidu.com/pub/show/createtext",
                  "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6",
                  "Content-Type": "application/x-www-form-urlencoded",
                  "Accept-Encoding": "gzip, deflate",
                  "User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
                  "Connection": "Keep-Alive",
                  "Cache-Control": "no-cache",
                  ‘Origin‘:‘http://hi.baidu.com‘,
                  ‘X-Requested-With‘:‘XMLHttpRequest‘
                }

        retdata = self.postData(‘http://hi.baidu.com/pub/submit/createtext‘, postTextData, headers)

简单的测试代码:

if __name__ == ‘__main__‘:
    tBaidu = BaiduSpace()
    tBaidu.login(‘user_name‘,‘user_pwd‘) #这里填自己的帐号密码
    print "login baidu ..."

    for i in range(0, 5):
        title = "new title %d" % i
        content = "new content %d" % i
        tBaidu.SendBlog(title, content)

最后,我们能够看到自己的百度空间内多了几篇文章

时间: 2024-08-29 09:42:25

模拟百度空间登录的相关文章

C#模拟百度登录

目录: 1.fiddler解析百度登录地址 2.处理传入参数 1.fiddler解析百度登录地址 因工作需要,所以研究了下百度的登陆.首先打开https://passport.baidu.com/v2/?login,我们用fiddler很快就能找到百度的登录入口https://passport.baidu.com/v2/api/?login .如下图: 在登录入口https://passport.baidu.com/v2/api/?login 之前,百度先会去获取publickey和token.

C#模拟百度登录并到指定网站评论回帖(五)

前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的弯路,真是太心酸了) 今天的详细评论过程就不多说了,这里就指出一下我在写这个功能的时候遭遇的问题,也正是这些问题导致陷入了困境.(主要是理论,有不懂的童鞋欢迎评论交流) 第一个问题:如果使用的百度登录网站,那么前面我们获取到BDUSS之后,到这里就要发生转换.因为我访问的网页,在访问主页的时候会通过

(转载)记:从百度空间搬家到博客园--写博客要写的舒服

转自http://www.cnblogs.com/syxchina/archive/2011/10/03/2198468.html 一直都有把百度空间搬家的想法,但由于百度空间我将就的用了快3年了,也写了很多文章,交了很多朋友,实在舍不得,但最近实在忍不住百度空间的限制,字数限制.无代码格式化.不支持windows live writer,每次写博客格式图片处理很是伤心,很多时候甚至不写博客,直接记录在doc文件来的方便省心!但想想平时很多只是汲取与互联网谷歌,不贡献点实在说不过去!下定决心,搬

如何邀请好友注册您的网站(模拟百度网盘)

花了一年时间做了个网盘下载站点,有兴趣的朋友可以看看站名:去转盘网 其中有个需求是想模拟百度网盘的邀请好友注册功能,想了很久果然 "皇天不负有心人" ,终于整理出个思路,并且附上代码,希望各位网友多多吐槽.我的思路大体是用网络范围内唯一的字符串uuid为标识去邀请好友,邀请者给个状态位 1 代表邀请者,并给他绑定个唯一uuid.被邀请者给个标识位0 代表被邀请者,如果他注册成功,则可以根据邀请链接获得uuid去查询数据库找到邀请者,找到后给予相应积分即可,代码如下: public St

实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和AppSecret Mob开放平台地址:http://www.mob.com/#/index QQ开放平台地址:http://open.qq.com/ 新浪微博开放平台地址:http://open.weibo.com/ 微信开放平台地址:https://open.weixin.qq.com/ 

模拟百度搜索框,输入时显示历史记录

今天写了个小demo,利用本地存储的特点,模拟百度搜索框. 主要知识是利用本地存储的特点,模拟百度搜索时的历史记录显示. 主要HTML代码为 <div class="search"> <input type="text"/> <button class="btn">搜索</button> </div> <ul class="hidden"> <li&

Android 实现QQ、微信、新浪微博和百度第三方登录

前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和AppSecret Mob开放平台地址:http://www.mob.com/#/index QQ开放平台地址:http://open.qq.com/ 新浪微博开放平台地址:http://open.weibo.com/ 微信开放平台地址:https://open.weixin.qq.com/ 

模拟百度搜索框

在使用百度搜索是,页面会根据我们输入的内容自动匹配一些候选内容. 实现的主要过程主要是: 1.用户在输入一个字符结束后,在onkeyup事件中获取用户输入的内容. 2.根据获取到的内容向服务器发送请求,匹配到相似的数据,存到数组中. 3.判断数组是否有内容,如果有数据,就在搜索框下面遍历匹配到的内容(候选项). 首先,要写好页面布局 html部分 <html> <head> <meta http-equiv="Content-Type" content=&

百度空间代码大全

display:nonecss全能隐藏代码 背景{}中添加background: url(图片地址)repeat注:repeat 背景图像在纵向和横向上平铺no-repeat 背景图像不平铺repeat-x 背景图像在横向上平铺repeat-y 背景图像在纵向平铺 line-height: 25.2px;">超链接自定义设置超链接的属性就是在相关栏目名称后面+上a{}的属性 color:#颜色代码或颜色英文名称 定义超链接字体的颜色font-family:字体名称 定义超链接字体font-