新浪 weibo 采用了新的登錄腳本; 目前支持的是RSA加密。
### 第一步:[?](http://uliweb.clkg.org/tutorial/view_chapter/240#title_0-0-1)
登陸weibo我們首先需要從: 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'
取得 4個值,主要是對本地明文密碼進行加密。
~~~
servertime = data['servertime']
nonce = data['nonce']
pubkey = data['pubkey']
rsakv = data['rsakv']
~~~
### 第二步:[?](http://uliweb.clkg.org/tutorial/view_chapter/240#title_0-0-2)
加密用戶名(su)
~~~
su = base64.b64encode(urllib.quote(username))
~~~
加密密碼(sp):
~~~
rsaPublickey= int(pubkey,16)
key = rsa.PublicKey(rsaPublickey,65537)
message = str(servertime) +'\t' + str(nonce) + '\n' + str(password)
sp = binascii.b2a_hex(rsa.encrypt(message,key))
~~~
加密后的數據提交
~~~
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,
}
~~~
### 第三步登陸:[?](http://uliweb.clkg.org/tutorial/view_chapter/240#title_0-0-3)
~~~
url_login = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5)'
resp = session.post(url_login,data=postdata)
~~~
### 完整代碼:[?](http://uliweb.clkg.org/tutorial/view_chapter/240#title_0-0-4)
~~~
#coding:utf-8
import requests
import base64
import re
import urllib
import rsa
import json
import binascii
username = 'xxx'
password = 'xxx'
session = requests.Session()
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)'
#get servertime,nonce, pubkey,rsakv
resp = session.get(url_prelogin)
json_data = re.search('\((.*)\)', resp.content).group(1)
data = json.loads(json_data)
servertime = data['servertime']
nonce = data['nonce']
pubkey = data['pubkey']
rsakv = data['rsakv']
# calc su
su = base64.b64encode(urllib.quote(username))
#calc sp
rsaPublickey= int(pubkey,16)
key = rsa.PublicKey(rsaPublickey,65537)
message = str(servertime) +'\t' + str(nonce) + '\n' + str(password)
sp = binascii.b2a_hex(rsa.encrypt(message,key))
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,
}
resp = session.post(url_login,data=postdata)
login_url = re.findall("replace\('(.*)'\)",resp.content)
#print login_url
resp = session.get(login_url[0])
print resp.content
uid = re.findall('"uniqueid":"(\d+)",',resp.content)[0]
url = "http://weibo.com/u/"+uid
resp = session.get(url)
print resp.content
~~~
發送微博的完整代碼
~~~
#coding:utf-8
import requests
import base64
import re
import urllib
import rsa
import json
import binascii
import time
username = 'xxx'
password = 'xxx'
session = requests.Session()
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)'
#get servertime,nonce, pubkey,rsakv
resp = session.get(url_prelogin)
json_data = re.search('\((.*)\)', resp.content).group(1)
data = json.loads(json_data)
servertime = data['servertime']
nonce = data['nonce']
pubkey = data['pubkey']
rsakv = data['rsakv']
# calc su
su = base64.b64encode(urllib.quote(username))
#calc sp
rsaPublickey= int(pubkey,16)
key = rsa.PublicKey(rsaPublickey,65537)
message = str(servertime) +'\t' + str(nonce) + '\n' + str(password)
sp = binascii.b2a_hex(rsa.encrypt(message,key))
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,
}
resp = session.post(url_login,data=postdata)
login_url = re.findall('replace\("(.*)"\)',resp.content)
#print login_url
resp = session.get(login_url[0])
#print resp.content
uid = re.findall('"uniqueid":"(\d+)",',resp.content)[0]
#print uid
#url = "http://weibo.com/u/"+uid
#resp = session.get(url)
#print resp.content
def decode_content(content):
result = re.findall('<script>STK && STK.pageletM && STK.pageletM.view\((.*?)\)<\/script>',content)
for i in result:
r = i.encode("utf-8").decode('unicode_escape').encode("utf-8")
print r.replace("\/","/")
#url_search = "http://s.weibo.com/weibo/%s?topnav=1&wvr=5&b=1" % "php"
#resp = session.get(url_search)
#decode_content( resp.content )
def add_new(content,resp):
add_url = "http://weibo.com/aj/mblog/add?_wv=5&__rnd=%s770"% int(time.time())
add_data = {
'text':content,
'rank':0,
'rankid':'',
'location':'home',
'module':'stissue',
"hottopicid":"",
'_surl':'',
'pic_id':'',
'_t':0,
}
headers={}
headers ['set-cookie']= resp.headers['set-cookie']
headers['Referer'] = 'http://weibo.com/u/'+uid+'?topnav=1&wvr=5'
resp = session.post(add_url,data=add_data,headers=headers)
print resp.status_code
add_new("hello",resp)
~~~
轉發
~~~
def forward(mid,content):
forwardurl = "http://weibo.com/aj/mblog/forward?_wv=5&__rnd=%s"% int(time.time())
data = {'mid':mid, 'style-type':1, 'reason':content, 'rank':0, 'location':'mblog', '_t':0}
headers = {}
headers['set-cookie'] = resp.headers['set-cookie']
headers['Referer'] = 'http://weibo.com/u/'+uid+'?topnav=1&wv=5'
respon = session.post(forwardurl, data, headers=headers)
print respon.status_code
forward('3606151827013483', "轉發")
~~~
關注
~~~
def followed(dstuid,oid):
followedurl = "http://weibo.com/aj/f/followed?_wv=5&__rnd=%s"% int(time.time())
data = {'uid':dstuid, 'rank':0, 'location':'mblog', '_t':0,'f':0,
'oid':oid,
'nogroup':'false',
'challenge_uids':'',
'check_challenge_value':'',
'location':'home',
'refer_sort':'interest',
'refer_flag':'friend_bridge',
'loc':1,
}
headers = {}
headers['set-cookie'] = resp.headers['set-cookie']
headers['Referer'] = 'http://weibo.com/u/'+oid+'?topnav=1&wv=5'
respon = session.post(followedurl, data, headers=headers)
print respon.status_code
followed('2898801847',uid)
~~~
~~~
result = re.findall('<script>STK && STK.pageletM && STK.pageletM.view\(({"pid":"pl_weibo_direct".*?)\)<\/script>',resp.content)
print eval(result[0])['html'].encode("utf-8").decode('unicode_escape').encode("utf-8")
~~~
# 發送微博2
~~~
import time
def add_new(content):
add_url = "http://weibo.com/aj/mblog/add?_wv=5&__rnd=%s"% int(time.time())
add_data = {
'text':content,
'rank':0,
'rankid':'',
'location':'home',
'module':'stissue',
"hottopicid":"",
'_surl':'',
'pic_id':'',
'_t':0,
}
headers={}
headers['Referer'] = 'http://weibo.com/u/'+uid+'?topnav=1&wvr=5'
resp = s.post(add_url,data=add_data,headers=headers)
print resp.status_code
add_new("@asmcos_智普教育 cookies?")
~~~
- Python爬蟲入門
- (1):綜述
- (2):爬蟲基礎了解
- (3):Urllib庫的基本使用
- (4):Urllib庫的高級用法
- (5):URLError異常處理
- (6):Cookie的使用
- (7):正則表達式
- (8):Beautiful Soup的用法
- Python爬蟲進階
- Python爬蟲進階一之爬蟲框架概述
- Python爬蟲進階二之PySpider框架安裝配置
- Python爬蟲進階三之Scrapy框架安裝配置
- Python爬蟲進階四之PySpider的用法
- Python爬蟲實戰
- Python爬蟲實戰(1):爬取糗事百科段子
- Python爬蟲實戰(2):百度貼吧帖子
- Python爬蟲實戰(3):計算大學本學期績點
- Python爬蟲實戰(4):模擬登錄淘寶并獲取所有訂單
- Python爬蟲實戰(5):抓取淘寶MM照片
- Python爬蟲實戰(6):抓取愛問知識人問題并保存至數據庫
- Python爬蟲利器
- Python爬蟲文章
- Python爬蟲(一)--豆瓣電影抓站小結(成功抓取Top100電影)
- Python爬蟲(二)--Coursera抓站小結
- Python爬蟲(三)-Socket網絡編程
- Python爬蟲(四)--多線程
- Python爬蟲(五)--多線程續(Queue)
- Python爬蟲(六)--Scrapy框架學習
- Python爬蟲(七)--Scrapy模擬登錄
- Python筆記
- python 知乎爬蟲
- Python 爬蟲之——模擬登陸
- python的urllib2 模塊解析
- 蜘蛛項目要用的數據庫操作
- gzip 壓縮格式的網站處理方法
- 通過瀏覽器的調試得出 headers轉換成字典
- Python登錄到weibo.com
- weibo v1.4.5 支持 RSA協議(模擬微博登錄)
- 搭建Scrapy爬蟲的開發環境
- 知乎精華回答的非專業大數據統計
- 基于PySpider的weibo.cn爬蟲
- Python-實現批量抓取妹子圖片
- Python庫
- python數據庫-mysql
- 圖片處理庫PIL
- Mac OS X安裝 Scrapy、PIL、BeautifulSoup
- 正則表達式 re模塊
- 郵件正則
- 正則匹配,但過濾某些字符串
- dict使用方法和快捷查找
- httplib2 庫的使用