python机器登陆新浪微博代码示例

  前段时间开始学习Python,一直想不到有什么好的小项目可以做,憋得慌,这不, 绞尽脑汁想出了一个爬取新浪微博,并对爬取数据做简单统计的项目。一开始我自以为学习了点Python正则就可以搞定了,熟料在机器登陆上栽了跟头,从完全一头雾水到现在初步登陆获取到数据,整整历经了四五天。因为之前没搞过机器登陆方面的代码,所以这次项目的初步完成完全归功于网上的一些大神,我只是拾人牙慧,拼凑了几个大神的代码,另外加几行注释而已。

# import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置
import re , urllib.parse , urllib.request , http.cookiejar , base64 , binascii , rsa# 以下4行代码说简单点就是让你接下来的所有get和post请求都带上已经获取的cookie,因为稍大些的网站的登陆验证全靠cookie
cj = http.cookiejar.LWPCookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support , urllib.request.HTTPHandler)
urllib.request.install_opener(opener)# 封装一个用于get的函数,新浪微博这边get出来的内容编码都是-8,所以把utf-8写死在里边了,真实项目中建议根据内容实际编码来决定
def getData(url) :request = urllib.request.Request(url)response = urllib.request.urlopen(request)text = response.read().decode('utf-8')return text# 封装一个用于post的函数,验证密码和用户名都是post的,所以这个postData在本demo中专门用于验证用户名和密码
def postData(url , data) :# headers需要我们自己来模拟headers = {'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}# 这里的urlencode用于把一个请求对象用'&'来接来字符串化,接着就是编码成utf-8data = urllib.parse.urlencode(data).encode('utf-8')request = urllib.request.Request(url , data , headers)response = urllib.request.urlopen(request)text = response.read().decode('gbk')return textdef login_weibo(nick , pwd) :#==========================获取servertime , pcid , pubkey , rsakv===========================# 预登陆请求,获取到若干参数prelogin_url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_=1400822309846' % nickpreLogin = getData(prelogin_url)# 下面获取的四个值都是接下来要使用的servertime = re.findall('"servertime":(.*?),' , preLogin)[0]pubkey = re.findall('"pubkey":"(.*?)",' , preLogin)[0]rsakv = re.findall('"rsakv":"(.*?)",' , preLogin)[0]nonce = re.findall('"nonce":"(.*?)",' , preLogin)[0]#===============对用户名和密码加密================
  # 好,你已经来到登陆新浪微博最难的一部分了,如果这部分没有大神出来指点一下,那就真是太难了,我也不想多说什么,反正就是各种加密,最后形成了加密后的su和spsu = base64.b64encode(bytes(urllib.request.quote(nick) , encoding = 'utf-8'))rsaPublickey = int(pubkey , 16)key = rsa.PublicKey(rsaPublickey , 65537)# 稍微说一下的是在我网上搜到的文章中,有些文章里并没有对拼接起来的字符串进行bytes,这是python3的新方法好像是。rsa.encrypt需要一个字节参数,这一点和之前不一样。其实上面的base64.b64encode也一样message = bytes(str(servertime) + '\t' + str(nonce) + '\n' + str(pwd) , encoding = 'utf-8')sp = binascii.b2a_hex(rsa.encrypt(message , key))#=======================登录=======================  #param就是激动人心的登陆post参数,这个参数用到了若干个上面第一步获取到的数据,可说的不多param = {'entry' : 'weibo' , 'gateway' : 1 , 'from' : '' , 'savestate' : 7 , 'useticket' : 1 , 'pagerefer' : 'http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D' , 'vsnf' : 1 , 'su' : su , 'service' : 'miniblog' , 'servertime' : servertime , 'nonce' : nonce , 'pwencode' : 'rsa2' , 'rsakv' : rsakv , 'sp' : sp , 'sr' : '1680*1050' ,'encoding' : 'UTF-8' , 'prelt' : 961 , 'url' : 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack'}# 这里就是使用postData的唯一一处,也很简单s = postData('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)' , param)# 好了,当你的代码执行到这里时,已经完成了大部分了,可是有很多爬虫童鞋跟我一样还就栽在了这里,假如你跳过这里直接去执行获取粉丝的这几行代码你就会发现你获取的到还是让你登陆的页面,真郁闷啊,我就栽在这里长达一天啊# 好了,我们还是继续。这个urll是登陆之后新浪返回的一段脚本中定义的一个进一步登陆的url,之前还都是获取参数和验证之类的,这一步才是真正的登陆,所以你还需要再一次把这个urll获取到并用get登陆即可urll = re.findall("location.replace\(\'(.*?)\'\);" , s)[0]getData(urll)#======================获取粉丝====================# 如果你没有跳过刚才那个urll来到这里的话,那么恭喜你!你成功了,接下来就是你在新浪微博里畅爬的时候了,获取到任何你想获取到的数据了!
  # 可以尝试着获取你自己的微博主页看看,你就会发现那是一个多大几百kb的文件了text = getData('http://weibo.com/527891819/home?wvr=5&lf=reg')fp = open('yeah.txt' , 'w' , encoding = 'utf-8')fp.write(text)fp.close()login_weibo('你的微博邮箱' , '你的微博密码')
#==================================================后记============================================================
#不经历风雨,怎能见彩虹!

Python机器登陆新浪微博代码示例相关推荐

  1. python登录新浪微博抓取微博内容_python机器登陆新浪微博抓取数据

    使用python机器登陆新浪微博抓取数据 1.[代码][Python]代码 # import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置 import re , ur ...

  2. python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例

    python如何实现性别识别?本篇文章小编给大家分享一下python实现性别识别代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 使用keras ...

  3. python pexpect模块详解_python Pexpect模块如何使用 python Pexpect模块使用代码示例

    python Pexpect模块如何使用?本篇文章小编给大家分享一下python Pexpect模块使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以 ...

  4. python表情代码_python如何实现表情识别 python实现表情识别代码示例

    python如何实现表情识别?本篇文章小编给大家分享一下python实现表情识别代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 表情识别 表情 ...

  5. python实现逻辑回归代码_python如何实现逻辑回归 python实现逻辑回归代码示例

    python如何实现逻辑回归?本篇文章小编给大家分享一下python实现逻辑回归代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如下: i ...

  6. python绘制组合图_Python如何绘制组合图 Python绘制组合图代码示例

    Python如何绘制组合图?本篇文章小编给大家分享一下Python绘制组合图代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 绘制组合图: 组合 ...

  7. python怎么加字幕_Python如何实现字幕挂载 Python实现字幕挂载代码示例

    Python如何实现字幕挂载?本篇文章小编给大家分享一下Python实现字幕挂载代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 本文在Wind ...

  8. python画圆弧组成的花瓣代码_用Python绘制个花朵代码示例

    用Python绘制个花朵代码示例及解析 #导入turtle模块 import turtle window=turtle.Screen() #创建一个新窗口用于绘图 babbage=turtle.Tur ...

  9. python画花朵代码_用Python绘制个花朵代码示例

    用Python绘制个花朵代码示例及解析 #导入turtle模块 import turtle window=turtle.Screen() #创建一个新窗口用于绘图 babbage=turtle.Tur ...

  10. python爬取新浪微博内容_python机器登陆新浪微博抓取数据

    1.[代码][Python]代码 # import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置 import re , urllib.parse , urllib.r ...

最新文章

  1. FFmpeg中libswscale库简介及测试代码
  2. 打破Transformer宿命,新秀VOLO开源!横扫CV多项记录,首个超越87%的模型
  3. 一文读懂Faster RCNN
  4. linux c/c++
  5. 像证券交易员一样思考_2.理解绝招
  6. adb logcat 命令行用法
  7. python区块链开发_Fabric区块链Python开发详解
  8. VS2008非托管c++访问webservice服务(以WeatherWS 天气服务 为例)
  9. es删除数据_面试官是怎么来考察你对ES搜索引擎的理解?
  10. C#中网络编程异步操作方法与 粘包和分包问题
  11. c语言图形时钟编程,c语言程序+图形编程——打造简易的时钟
  12. 华为设备好的visio图标及ppt图标
  13. 总结十八:程序员激励办法——激励理论
  14. AXD 调试经验,使用及问题
  15. 火狐,Firefox浏览器怎么设置主页
  16. 《一切都是最好的安排》之感想
  17. Java菜鸟如何入门?1分钟入门
  18. TCP的三次握手与四次挥手理解
  19. Win10 正式版系统启动盘制作教程
  20. 磁盘管理器/磁盘管理工具给电脑硬盘分区

热门文章

  1. LINUX下载编译Paho-Mqtt-C
  2. 线程令牌桶的实现及条件变量改进版本
  3. wps怎么把当前页面设置为横向_办公软件操作技巧011:如何将word文档的部分页面改为横向...
  4. html修改访问量txt,哪位大佬帮我改一下JS谢谢,txt改html网页直接显示的,感激不尽,现在的源码只能看......
  5. mysql 5.1.71_MySQL升级从5.1.71到5.7.17
  6. linux安装gcc-4.9,centos7.2编译安装gcc-4.9.2
  7. 怎么修改数组中指定元素_topK问题总结:数组中的前K大元素
  8. 使用WordPress插件Advanced custom fields来扩展文章字段
  9. 在 ReactNative 的 App 中,集成 Bugly 你会遇到的一些坑
  10. Spring Boot 集成 RabbitMQ 升级