PC 登录新浪微博时, 在客户端用js预先对用户名、密码都进行了加密, 而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分。 这样, 就不能用通常的那种简单方法来模拟POST 登录( 比如 人人网 )。

由于要用的一部分微博数据用API获取不方便, 所以还是要自己写个小爬虫, 模拟登录是必不可少的。琢磨了一下这个东西,最终登录成功。

1, 在提交POST请求之前, 需要GET 获取两个参数。

地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)

得到的数据中有 "servertime" 和 "nonce" 的值, 是随机的,其他值貌似没什么用。

2, 通过httpfox 观察POST 的数据, 参数较复杂,其中 “su" 是加密后的username, "sp"是加密后的password。"servertime" 和 ”nonce" 是上一步得到的。其他参数是不变的。

username 经过了BASE64 计算: username = base64.encodestring( urllib.quote(username) )[:-1];

password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰。

即: 两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1 算一次。

将参数组织好, POST请求。 这之后还没有登录成功。

POST后得到的内容中包含一句 location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3");

这是登录失败时的结果, 登录成功后结果与之类似, 不过retcode 的值是0 。接下来再请求这个URL,这样就成功登录到微博了。

记得要提前build 缓存。

下面是完整代码(没加注释,凑合看吧):

#! /usr/bin/env python

#coding=utf8

import urllib

import urllib2

import cookielib

import base64

import re

import json

import hashlib

cj = cookielib.LWPCookieJar()

cookie_support = urllib2.HTTPCookieProcessor(cj)

opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)

urllib2.install_opener(opener)

postdata = {

'entry': 'weibo',

'gateway': '1',

'from': '',

'savestate': '7',

'userticket': '1',

'ssosimplelogin': '1',

'vsnf': '1',

'vsnval': '',

'su': '',

'service': 'miniblog',

'servertime': '',

'nonce': '',

'pwencode': 'wsse',

'sp': '',

'encoding': 'UTF-8',

'url': '

'returntype': 'META'

}

def get_servertime():

url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939'

data = urllib2.urlopen(url).read()

p = re.compile('\((.*)\)')

try:

json_data = p.search(data).group(1)

data = json.loads(json_data)

servertime = str(data['servertime'])

nonce = data['nonce']

return servertime, nonce

except:

print 'Get severtime error!'

return None

def get_pwd(pwd, servertime, nonce):

pwd1 = hashlib.sha1(pwd).hexdigest()

pwd2 = hashlib.sha1(pwd1).hexdigest()

pwd3_ = pwd2 + servertime + nonce

pwd3 = hashlib.sha1(pwd3_).hexdigest()

return pwd3

def get_user(username):

username_ = urllib.quote(username)

username = base64.encodestring(username_)[:-1]

return username

def login():

username = '你的登录邮箱'

pwd = '你的密码'

url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)'

try:

servertime, nonce = get_servertime()

except:

return

global postdata

postdata['servertime'] = servertime

postdata['nonce'] = nonce

postdata['su'] = get_user(username)

postdata['sp'] = get_pwd(pwd, servertime, nonce)

postdata = urllib.urlencode(postdata)

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}

req  = urllib2.Request(

url = url,

data = postdata,

headers = headers

)

result = urllib2.urlopen(req)

text = result.read()

p = re.compile('location\.replace\(\'(.*?)\'\)')

try:

login_url = p.search(text).group(1)

#print login_url

urllib2.urlopen(login_url)

print "登录成功!"

except:

print 'Login error!'

login()

转载:http://www.douban.com/note/201767245/

python 登录新浪微博_模拟登录新浪微博(Python)相关推荐

  1. python新浪_【图解】Python模拟登录新浪微博

    上一篇文章<Scrapy用Cookie实现模拟登录>完成了用Cookie实现模拟登录,绕开了用户名.密码和验证码登录的步骤.今天来比较一下以常规验证(用户名密码+验证码)的方式实现新浪微博 ...

  2. python之cookie, cookiejar 模拟登录绕过验证

    0.思路 如果懒得模拟登录,或者模拟登录过于复杂(多步交互或复杂验证码)则人工登录后手动复制cookie(或者代码读取浏览器cookie),缺点是容易过期. 如果登录是简单的提交表单,代码第一步模拟登 ...

  3. 新浪微博爬虫模拟登录(爬手机版)

    新浪微博爬虫模拟登录 最近一直在想做新浪微博爬取,开始的时候做了一个PC版的爬取,但是发现提取内容真心难过所以在这里爬了手机版的话不多说,show you my code 这个可以提取固定人微博内容, ...

  4. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  5. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  6. python 模拟登录获取cookie_Python获取新浪微博cookie模拟登录

    这次尝试模拟登录微博,获取com网站cookie,cn不可用. 分析网站 首先打开weibo.com微博登录页面,如果已经登录需要先退出(其他的com登录页应该也是可以的). 打开chrome调试,查 ...

  7. python爬虫登录微博_【新手学Python爬虫】微博网页PC端抓包分析和模拟登录

    本帖最后由 杀猪用牛刀 于 2020-4-2 23:59 编辑 首先我是一个python爬虫的新手,模拟登录也是我看b站模拟登录教学加自己琢磨完成的,其中很多分析很粗糙,还希望大家多多包涵:lol 话 ...

  8. python计算学分绩点的程序_模拟登录教务系统计算GPA的小程序

    做了一些小游戏之后开始慢慢体会敲代码是件体力活,慢慢熬总能熬出来的.这几天又心血来潮想写个程序模拟登录教务系统计算GPA的小程序.不过之前没有一点点网络编程的经验,就趁着期中考后放假4天,一点点把坑填 ...

  9. python访问陌生人qq空间_在Python中使用Phantomjs模拟登录QQ空间

    一.问题来源 在使用Python进行数据爬取的过程中,我们一般使用Selenuim自动化测试工具对需要进行登录验证和动态JS数据的站点进行爬取.而与Selenuim相对应的浏览器组件,为了方便起见,一 ...

最新文章

  1. Science:固氮(The nitrogen fix)
  2. pandas 数据分析 相关性_探索 COVID-19 新冠数据来学习 Pandas
  3. 隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)
  4. Java锁详解之改进读写锁StampedLock
  5. shell 编程学习笔记(一)
  6. python 通信中间件_apachemiddleware-有用的Python中间件,用于mod\wsgi部署-James Gardner 0.1.1 0.1.0...
  7. Xcode 4.4 的新特性 | LLVM 4.0 的新语法
  8. xenserver 脚本学习之/opt/xensource/bin/xapi-wait-init-complete
  9. 配置exchange 2010高可用群集服务(dag)
  10. win 2016 ssh_多台WIN10之间的SSH免密登录
  11. 初学者看看PHP explode() 函数 第6篇
  12. (4)HTML标签补充和HTML转义字符
  13. 消除blur属性的边框
  14. 【小技巧】程序运行结束后弹窗提醒
  15. js 实现图片上传
  16. Kvaser、C++、Qt编写监控界面(一)
  17. 踏雪点圣火,冰雕刻五环!揭秘全球刷屏的冬奥开幕式黑科技
  18. 如何用html实现图片轮播,怎么单纯的用html+css实现图片轮播?
  19. Python常见低级错误/拼写错误
  20. Consider defining a bean of type ‘com.xingchen.media.service.MediaFileService‘ in your configuration

热门文章

  1. 借VR产业东风,江西抢滩布局“元宇宙”
  2. 来看看这些电脑清理内存的方法
  3. Linux命令行测试网速
  4. RTC介绍——单片机中的时钟芯片
  5. 饱和约束下轮式机器人的轨迹跟踪控制算法 (MATLAB实现)
  6. 图片转word怎样转?
  7. 收藏!!公司法人变更全流程及问题汇总
  8. 隐私计算头条周刊(7.17-7.23)
  9. SPSS数据分析方法不知道如何选择
  10. Android端的移动支付-银联支付