最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python模擬新浪微博登陸功能(新浪微博爬蟲)

 更新時間:2013年12月24日 14:26:50   作者:  
使用Python編寫一個模擬登陸的程序,利用這個原來可以設(shè)計自己的爬蟲,大家參考使用吧

1、主函數(shù)(WeiboMain.py):

復(fù)制代碼 代碼如下:

import urllib2
import cookielib

import WeiboEncode
import WeiboSearch

if __name__ == '__main__':
    weiboLogin = WeiboLogin('×××@gmail.com', '××××')#郵箱(賬號)、密碼
    if weiboLogin.Login() == True:
        print "登陸成功!"

前兩個import是加載Python的網(wǎng)絡(luò)編程模塊,后面的import是加載另兩個文件WeiboEncode.py和Weiboseach.py(稍后介紹)。主函數(shù)新建登陸對象,然后登陸。

2、WeiboLogin類(WeiboMain.py):

復(fù)制代碼 代碼如下:

class WeiboLogin:
    def __init__(self, user, pwd, enableProxy = False):
        "初始化WeiboLogin,enableProxy表示是否使用代理服務(wù)器,默認(rèn)關(guān)閉"

        print "Initializing WeiboLogin..."
        self.userName = user
        self.passWord = pwd
        self.enableProxy = enableProxy

        self.serverUrl = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.11)&_=1379834957683"
        self.loginUrl = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)"
        self.postHeader = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0'}

初始化函數(shù),定義了兩個關(guān)鍵的url成員:self.serverUrl用于登陸的第一步(獲取servertime、nonce等),這里的第一步實質(zhì)包含了解析新浪微博的登錄過程的1和2;self.loginUrl用于第二步(加密用戶和密碼后,POST給該URL,self.postHeader是POST的頭信息),這一步對應(yīng)于解析新浪微博的登錄過程的3。類內(nèi)函數(shù)還有3個:

復(fù)制代碼 代碼如下:

def Login(self):
        "登陸程序" 
        self.EnableCookie(self.enableProxy)#cookie或代理服務(wù)器配置

        serverTime, nonce, pubkey, rsakv = self.GetServerTime()#登陸的第一步
        postData = WeiboEncode.PostEncode(self.userName, self.passWord, serverTime, nonce, pubkey, rsakv)#加密用戶和密碼
        print "Post data length:\n", len(postData)

        req = urllib2.Request(self.loginUrl, postData, self.postHeader)
        print "Posting request..."
        result = urllib2.urlopen(req)#登陸的第二步——解析新浪微博的登錄過程中3
        text = result.read()
        try:
            loginUrl = WeiboSearch.sRedirectData(text)#解析重定位結(jié)果
              urllib2.urlopen(loginUrl)
        except:
            print 'Login error!'
            return False

        print 'Login sucess!'
        return True

self.EnableCookie用于設(shè)置cookie及代理服務(wù)器,網(wǎng)絡(luò)上有很多免費的代理服務(wù)器,為防止新浪封IP,可以使用。然后使登陸的第一步,訪問新浪服務(wù)器得到serverTime等信息,然后利用這些信息加密用戶名和密碼,構(gòu)建POST請求;執(zhí)行第二步,向self.loginUrl發(fā)送用戶和密碼,得到重定位信息后,解析得到最終跳轉(zhuǎn)到的URL,打開該URL后,服務(wù)器自動將用戶登陸信息寫入cookie,登陸成功。

復(fù)制代碼 代碼如下:

def EnableCookie(self, enableProxy):
    "Enable cookie & proxy (if needed)."

    cookiejar = cookielib.LWPCookieJar()#建立cookie
    cookie_support = urllib2.HTTPCookieProcessor(cookiejar)

    if enableProxy:
        proxy_support = urllib2.ProxyHandler({'http':'http://xxxxx.pac'})#使用代理
         opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)
        print "Proxy enabled"
    else:
        opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)

    urllib2.install_opener(opener)#構(gòu)建cookie對應(yīng)的opener

EnableCookie函數(shù)比較簡單

復(fù)制代碼 代碼如下:

def GetServerTime(self):
    "Get server time and nonce, which are used to encode the password"

    print "Getting server time and nonce..."
    serverData = urllib2.urlopen(self.serverUrl).read()#得到網(wǎng)頁內(nèi)容
     print serverData

    try:
        serverTime, nonce, pubkey, rsakv = WeiboSearch.sServerData(serverData)#解析得到serverTime,nonce等
         return serverTime, nonce, pubkey, rsakv
    except:
        print 'Get server time & nonce error!'
        return None

WeiboSearch文件中的函數(shù)主要用于解析從服務(wù)器得到的數(shù)據(jù),比較簡單。

3、sServerData函數(shù)(WeiboSearch.py):

復(fù)制代碼 代碼如下:

import re
import json

def sServerData(serverData):
    "Search the server time & nonce from server data"

    p = re.compile('\((.*)\)')
    jsonData = p.search(serverData).group(1)
    data = json.loads(jsonData)
    serverTime = str(data['servertime'])
    nonce = data['nonce']
    pubkey = data['pubkey']#
    rsakv = data['rsakv']#
    print "Server time is:", serverTime
    print "Nonce is:", nonce
    return serverTime, nonce, pubkey, rsakv

解析過程主要使用了正則表達(dá)式和JSON,這部分比較容易理解。另外Login中解析重定位結(jié)果部分函數(shù)也在這個文件中如下:

復(fù)制代碼 代碼如下:

def sRedirectData(text):
    p = re.compile('location\.replace\([\'"](.*?)[\'"]\)')
    loginUrl = p.search(text).group(1)
    print 'loginUrl:',loginUrl
    return loginUrl

4、從第一步到第二步要對用戶和密碼進(jìn)行加密,編碼操作(WeiboEncode.py)

復(fù)制代碼 代碼如下:

import urllib
import base64
import rsa
import binascii

def PostEncode(userName, passWord, serverTime, nonce, pubkey, rsakv):
    "Used to generate POST data"

    encodedUserName = GetUserName(userName)#用戶名使用base64加密
     encodedPassWord = get_pwd(passWord, serverTime, nonce, pubkey)#目前密碼采用rsa加密
     postPara = {
        'entry': 'weibo',
        'gateway': '1',
        'from': '',
        'savestate': '7',
        'userticket': '1',
        'ssosimplelogin': '1',
        'vsnf': '1',
        'vsnval': '',
        'su': encodedUserName,
        'service': 'miniblog',
        'servertime': serverTime,
        'nonce': nonce,
        'pwencode': 'rsa2',
        'sp': encodedPassWord,
        'encoding': 'UTF-8',
        'prelt': '115',
        'rsakv': rsakv,    
        'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
        'returntype': 'META'
    }
    postData = urllib.urlencode(postPara)#網(wǎng)絡(luò)編碼
    return postData

PostEncode函數(shù)構(gòu)建POST的消息體,要求構(gòu)建得到內(nèi)容與真正登陸所需的信息相同。難點在用戶名和密碼的加密方式:

復(fù)制代碼 代碼如下:

def GetUserName(userName):
    "Used to encode user name"

    userNameTemp = urllib.quote(userName)
    userNameEncoded = base64.encodestring(userNameTemp)[:-1]
    return userNameEncoded


def get_pwd(password, servertime, nonce, pubkey):
    rsaPublickey = int(pubkey, 16)
    key = rsa.PublicKey(rsaPublickey, 65537) #創(chuàng)建公鑰
    message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到
    passwd = rsa.encrypt(message, key) #加密
    passwd = binascii.b2a_hex(passwd) #將加密信息轉(zhuǎn)換為16進(jìn)制。
    return passwd

新浪登錄過程,密碼的加密方式原來是SHA1,現(xiàn)在變?yōu)榱薘SA,以后可能還會變化,但是各種加密算法在Python中都有對應(yīng)的實現(xiàn),只要發(fā)現(xiàn)它的加密方式(),程序比較易于實現(xiàn)。

到這里,Python模擬登陸新浪微博就成功了,運行輸出:

復(fù)制代碼 代碼如下:

loginUrl: http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390390056&ticket=ST-MzQ4NzQ5NTYyMA==-1387798056-xd-284624BFC19FE242BBAE2C39FB3A8CA8&retcode=0
Login sucess!

果需要爬取微博中的信息,接下來只需要在Main函數(shù)后添加爬取、解析模塊就可以了,比如讀取某微博網(wǎng)頁的內(nèi)容:

復(fù)制代碼 代碼如下:

htmlContent = urllib2.urlopen(myurl).read()#得到myurl網(wǎng)頁的所有內(nèi)容(html)

大家可以根據(jù)不同的需求設(shè)計不同的爬蟲模塊了,模擬登陸的代碼放在這里。

相關(guān)文章

  • pytorch實現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解

    pytorch實現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解

    這篇文章主要介紹了pytorch實現(xiàn)梯度下降和反向傳播,反向傳播的目的是計算成本函數(shù)C對網(wǎng)絡(luò)中任意w或b的偏導(dǎo)數(shù)。一旦我們有了這些偏導(dǎo)數(shù),我們將通過一些常數(shù)α的乘積和該數(shù)量相對于成本函數(shù)的偏導(dǎo)數(shù)來更新網(wǎng)絡(luò)中的權(quán)重和偏差
    2023-04-04
  • 簡單談?wù)凱ython中函數(shù)的可變參數(shù)

    簡單談?wù)凱ython中函數(shù)的可變參數(shù)

    和C語言一樣,Python中也有可變參數(shù)函數(shù),即一個函數(shù)可以接收多個參數(shù),而這些參數(shù)的個數(shù)在函數(shù)調(diào)用之前事先是不知道的。下面這篇文章我們來介紹下python中的可變參數(shù)
    2016-09-09
  • python 第三方庫paramiko的常用方式

    python 第三方庫paramiko的常用方式

    這篇文章主要介紹了python 第三方庫paramiko的常用方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python+requests+pytest接口自動化的實現(xiàn)示例

    python+requests+pytest接口自動化的實現(xiàn)示例

    這篇文章主要介紹了python+requests+pytest接口自動化的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python的logging模塊基本用法

    Python的logging模塊基本用法

    這篇文章主要介紹了Python的logging模塊基本用法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Pytorch: 自定義網(wǎng)絡(luò)層實例

    Pytorch: 自定義網(wǎng)絡(luò)層實例

    今天小編就為大家分享一篇Pytorch: 自定義網(wǎng)絡(luò)層實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 利用python實現(xiàn)逐步回歸

    利用python實現(xiàn)逐步回歸

    今天小編就為大家分享一篇利用python實現(xiàn)逐步回歸,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Numpy 理解ndarray對象的示例代碼

    Numpy 理解ndarray對象的示例代碼

    這篇文章主要介紹了Numpy 理解ndarray對象的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖

    Python使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖

    日常工作、生活中我們經(jīng)常會遇到一些復(fù)雜的事務(wù)關(guān)系,比如人物關(guān)系,那如何才能清楚直觀的看清楚這些任務(wù)關(guān)系呢?所以小編給大家介紹了Python如何使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • python中pandas庫中DataFrame對行和列的操作使用方法示例

    python中pandas庫中DataFrame對行和列的操作使用方法示例

    這篇文章主要介紹了python中pandas庫中DataFrame對行和列的操作使用方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論

灌阳县| 廊坊市| 荔波县| 馆陶县| 皋兰县| 金塔县| 神木县| 甘德县| 海原县| 湄潭县| 砚山县| 米泉市| 搜索| 梁平县| 宜宾县| 普定县| 永春县| 车致| 平原县| 福泉市| 灵台县| 南丰县| 安西县| 手机| 驻马店市| 枝江市| 大同县| 万源市| 福贡县| 万山特区| 镇原县| 疏附县| 峨山| 邵武市| 东平县| 措美县| 即墨市| 虞城县| 治县。| 利川市| 方正县|