Python 模拟微博登陆

最近微博的API接口进一步收紧,http://news.zol.com.cn/tech/73700.html

确实表示理解,很多搞学术搞分析的,轮X新浪的服务器,自己赚的一盆满钵却不给人家钱的确说不过去,而且新浪实际上还蛮厚道的,对于原来的应用,貌似还是正常的待遇。

废话少说,分析一下名人的微博还是非常有必要的,既然API不行的话,那就只能直接爬取网页了,不能大规模使用,但肯定是够用了

# -*- coding: utf-8 -*-
import urllib2, urllib, cookielib
import re, json, base64
import rsa, binascii

url_prelogin = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo'\
'&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.5)'\
'&_=1364875106625'
url_login = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5)'

class Toy(object):
    def fecth_page(self, url = 'http://weibo.com', data = None):
        return self.__opener.open(url, data)
    
    def __init__(self, username, password):
        self.__username = username
        self.__password = password
        cj = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0')]
        self.__opener = opener
        self.__login()
    
    def __encode_passwd(self, pwd, servertime, nonce, pubkey):
        rsaPublickey = int(pubkey, 16)
        key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
        message = str(servertime) + '\t' + str(nonce) + '\n' + str(pwd)#拼接明文 js加密文件中得到
        passwd = rsa.encrypt(message, key)#加密
        passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
        return passwd

    def __encode_username(self, username):
        username = urllib.quote(username)
        username = base64.encodestring(username)[:-1]
        return username
    
    def __prelogin(self):
        html = self.__opener.open(url_prelogin).read()
        json_data = re.search('\((.*)\)', html).group(1)
        data = json.loads(json_data)
        servertime = data['servertime']
        nonce = data['nonce']
        pubkey = data['pubkey']
        rsakv = data['rsakv']
        return servertime, nonce, pubkey, rsakv
    
    def __login(self):
        (servertime, nonce, pubkey, rsakv) = self.__prelogin()
        sp = self.__encode_passwd(self.__password, servertime, nonce, pubkey)
        su = self.__encode_username(self.__username)
        postdata = {
                    'entry': 'weibo',
                    'gateway': '1',
                    'from': '',
                    'savestate': '7',
                    'userticket': '1',
                    'ssosimplelogin': '1',
                    'vsnf': '1',
                    'vsnval': '',
                    'su': su,
                    'service': 'miniblog',
                    'servertime': servertime,
                    'nonce': nonce,
                    'pwencode': 'rsa2',
                    'sp': sp,
                    'encoding': 'UTF-8',
                    'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
                    'returntype': 'META',
                    'rsakv' : rsakv,
                    }


        postdata = urllib.urlencode(postdata)
        html = self.__opener.open(url_login, postdata).read()
       
        
        try:
            url_final = re.search('location\.replace\(\"(.*?)\"\)', html).group(1)
            self.__opener.open(url_final)
            #print login_url
            print "登录成功!"
        except:
            print 'Login error!'

def test():
    t = Toy('YourName','YourPwd')

    #抓取李开复的微博
    testUrl = 'http://weibo.com/1197161814/follow?from=rel&wvr=5&loc=hisfollow'
    f = open('res.txt', 'w')
    f.write(t.fecth_page(testUrl).read())
test()

参考资料:

python登陆代码:

登陆代码原理分析:

Python 模拟微博登陆》上有10条评论

  1. Pingback引用通告: Python 模拟微博登陆 | Beannote Blog

  2. ???????

    GTOCは台湾で最も大きなガラス加工サービスを提供するメーカーで、先進なカバーガラスと3D成型ガラスの開発をリードしていますGTOCは世界的に&#

    回复
  3. ????

    優勝の喜びを伝える独占手記をサンケイスポーツに寄せた。○商品の返品に関してはこちらをご覧くださいませ○,ソファーベッド。また、&#383

    回复
  4. ????

    : 200 円 入札はこちら 残り時間 : 1 日 ( 詳細な残り時間 ) 入札件数 : 0 ( 入札履歴 ) 便利機能 モバイル版で商品をチェック 友だちにメールを&#36

    回复
  5. ???????

    編だって、エリザベス女王杯は本命◎レインボーダリアで7番人気1着、マイルCSが本命◎ドナウブルーで5番人気3着ですよ。いずれも強酸性水生

    回复
  6. CARNIVAL CHRISTMAS COSPLAY

    Trackback by order propecia without prescription \u0026 # 8212., State divorce laws to find out the resident requirements before filing., Certain,, its not like the Zoom LeBron V had the colorway possible comparable with The Six,, but it seemed a little odd., Complete and submit their internet questionnaire., image_id 5292% 2B% 5BR% 5D% 2BPOST% 2s., City garments,, louis vuitton womens sneakers often called hip hop garments,, louis vuitton fabric handbagslv bag sale avenue design and style or ev

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注