Python模拟微博登陆的方法介绍

本篇文章给大家带来的内容是关于Python模拟微博登陆的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

今天想做一个微博爬个人页面的工具,满足一些不可告人的秘密。那么首先就要做那件必做之事!模拟登陆……

我对代码进行了优化,重构成了Python 3.6 版本,并且加入了大量注释方便大家学习。

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

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

地址是:

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

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

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'

# 返回出来的是一个Response对象,无法直接获取,text后,可以通过正则匹配到

# 大概长这样子的:sinaSSOController.preloginCallBack({"retcode":0,"servertime":1545606770, ...})

data = requests.request('GET', url).text

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('获取 severtime 失败!')

return None

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 算一次。

def get_pwd(pwd, servertime, nonce):

# 第一次计算,注意Python3 的加密需要encode,使用bytes

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

# 使用pwd1的结果在计算第二次

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

# 使用第二次的结果再加上之前计算好的servertime和nonce值,hash一次

pwd3_ = pwd2 + servertime + nonce

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

return pwd3

def get_user(username):

# 将@符号转换成url中能够识别的字符

_username = urllib.request.quote(username)

# Python3中的base64计算也是要字节

# base64出来后,最后有一个换行符,所以用了切片去了最后一个字符

username = base64.encodebytes(_username.encode())[:-1]

return username

3、将参数组织好, 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 缓存。

python模拟登陆微博_Python模拟微博登陆的实例讲解相关推荐

  1. python链表的创建_python数据结构之链表的实例讲解

    在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...

  2. python的empty函数_python中numpy.empty()函数实例讲解

    在使用python编程的过程中,想要快速的创建ndarray数组,可以使用numpy.empty()函数.numpy.empty()函数所创建的数组内所有元素均为空,没有实际意义,所以它也是创建数组最 ...

  3. 用python画雪花飘落_python实现雪花飘落效果实例讲解

    在学习pygame模块过程中,我们可以通过使用 pygame模块实现很多功能性的东西,但是很多人应该没有利用pygame实现过雪花飘落的效果吧,有时候可能是不知道从何入手或者是没有时间写,接下来我就教 ...

  4. python做雪花飘落_python实现雪花飘落效果实例讲解

    在学习pygame模块过程中,我们可以通过使用 pygame模块实现很多功能性的东西,但是很多人应该没有利用pygame实现过雪花飘落的效果吧,有时候可能是不知道从何入手或者是没有时间写,接下来我就教 ...

  5. python 安卓模拟点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  6. python实现安卓点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  7. python模拟点击屏幕ios_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  8. python怎么登录微博并发微博_Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  9. python模拟全部代码_Python模拟登陆实现代码

    下面分享一个使用Python进行网站模拟登陆的小例子. 原理 使用Cookie技术,绕开网站登录验证.要使用到cookielib库.流程: 创建一个保存Cookie的容器,可选的有CookieJar, ...

  10. python的模拟登录原理_Python模拟登陆实例详解

    本篇文章主要介绍了Python模拟登陆实现代码,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 下面分享一个使用Python进行网站模拟登陆的小例子. 原理 使用Cookie技 ...

最新文章

  1. 理解和解决Java并发修改异常ConcurrentModificationException(转载)
  2. 北大数学“黄金一代”今何在?
  3. LeetCode每日一题:N叉树的层序遍历(No.429)
  4. PowerDesigner的Table视图同时显示Code和Name的方法[转发]
  5. VTK:标量条形 Actor用法实战
  6. 如何用python写串口通信软件_如何用python写个串口通信的程序?
  7. uni map 实时记录轨迹_国际学校纷纷引进MAP考试系统,到底有什么好处?
  8. 利用aspnetPager控件加存储过程实现对gridview的分页
  9. 小米相机曝光_小米11pro曝光,超级屏+双6400万+骁龙875,不愧是小米旗舰
  10. WinForm 使用 HttpUtility
  11. OOP之C#设计及其UML(反向工程)
  12. 2022蓝桥杯java
  13. 《此生未完成》:她说,名利权情,没有一样是不辛苦的
  14. 九度OJ 1538 GrassLand密码
  15. 面试题:群聊消息的已读未读设计
  16. 矩形法求定积分c语言流程图,矩形法求定积分其程序与程序框图的实现.doc
  17. android实现 桌面移动悬浮窗口实现
  18. linux修改显示日期格式,centos面板日期格式调整
  19. Git提交报错git-upload-pack
  20. 「日常训练知识学习」树的直径(POJ-1849,Two)

热门文章

  1. 联想win10安全模式进入以及退出
  2. oppo手机硬件测试软件,OPPO怎么测试手机硬件,只需要做这一步,进入工程模式...
  3. USB转串口那些事儿—USB转串口工作原理及应用
  4. Excel批量自动删除空白行
  5. 北京邮电大学计算机导论试题,2020年秋季《北京邮电大学网络教育》各种考试题目汇总.docx...
  6. 北京邮电大学计算机学院考研夏令营,北京邮电大学计算机学院(专业学位)计算机技术保研夏令营...
  7. phpstudy使用数据库教程
  8. 南大计算机软件所,2020考研南京大学计算机软件研究所推免夏令营通知_南大软件所20推免_聚创南大考研网...
  9. js传参不是数字_js中函数传参方式
  10. GAT GAX 简介