python-微博模拟登陆
微博的的模拟登陆是比较坑的,看了网上很多大神的帖子,自己又看了微博的登陆时的json数据:1、发现登陆时在输入账号时用chrome可以看到会有一个prelogin之类的网址,网址后面会有大串的随机数。我测试了下,发现在没有随机数的情况下的网址也能得到所需要的severtime、nonce、等几个数据。2、通过chrome查看json数据就可以看到用户名和密码的加密方式,再找了网上大神的资料就可以得到用户名su、和密码sp。再把数据post 上去就可以得到一个重定向的微博登陆网址。3、将这个网址用正则表达式提取出来,再带上cookie数据就可以登陆了。然后你想干什么就干什
# _*_coding:utf-8 _*_ import base64
import urllib
import urllib2
import re
import rsa
import cookielib class Weibo(object): def __init__(self, username, password):
self.user = base64.b64encode(username)
self.pwd = password @property
def get_pre_url_values(self):
values_dict = {}
su = self.user
pre_url = 'https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=' \
+ str(su[:-1]) + '%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'
} request = urllib2.Request(pre_url, headers=header)
html = urllib2.urlopen(request).read().decode('utf-8') p = re.compile(r'"servertime":(.*?),')
values_dict['servertime'] = p.search(html).group(1).strip('\"') p1 = re.compile(r'"pcid":(.*?),')
values_dict['pcid'] = p1.search(html).group(1).strip('\"') p2 = re.compile(r'"nonce":(.*?),')
values_dict['nonce'] = p2.search(html).group(1).strip('\"') p3 = re.compile(r'"pubkey":(.*?),')
values_dict['pubkey'] = p3.search(html).group(1).strip('\"') p4 = re.compile(r'"rsakv":(.*?),')
values_dict['rsakv'] = p4.search(html).group(1).strip('\"') return values_dict def get_password(self, blog_values):
'''
这个函数是微博的json数据和网上的大神方法的出来的(抄来的)^_^
''' rsapubkey = int(blog_values['pubkey'], 16)
key = rsa.PublicKey(rsapubkey, 65537)
massage = str(blog_values['servertime']) + '\t' + str(blog_values['nonce']) + '\n' + str(self.pwd)
password = rsa.encrypt(massage, key)
sp = password.encode('hex')
return sp def login_weibo(self, blog_values, sp): values = {
'entry': "weibo",
'gateway': '',
'from': '',
'savestate': '',
'userticket': '',
'pagerefer': "",
'cfrom': '',
'vsnf': '',
'su': self.user,
'service': 'miniblog',
'servertime': blog_values['servertime'],
'nonce': blog_values['nonce'],
'pwencode': 'rsa2',
'rsakv': blog_values['rsakv'],
'sp': sp,
'sr': "1440*900",
'encoding': 'UTF-8',
'prelt': '',
'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'META'
} header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'
}
url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)' '''获取cookie信息 '''
cj = cookielib.CookieJar()
cj_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cj_support) data = urllib.urlencode(values)
try:
response = urllib2.Request(url, headers=header, data=data)
html = opener.open(response).read().decode('gbk')
except Exception, e:
print e.message p = re.compile(r'location\.replace\(\'(.*?)\'\)')
url = p.search(html).group(1)
try:
url_request = urllib2.Request(url)
response_url = opener.open(url_request)
page = response_url.read().decode('utf-8')
p2 = re.compile(r'"userdomain":"(.*?)"')
dom = p2.search(page).group(1) login_url = 'http://weibo.com/' + dom
request_login_url = urllib2.Request(login_url)
response_login_url = opener.open(request_login_url)
per_html = response_login_url.read().decode('utf-8')
except Exception:
per_html = '登陆失败' return per_html if __name__ == '__main__': wbobj = Weibo('用户名', '密码')
sp = wbobj.get_password(wbobj.get_pre_url_values)
html = wbobj.login_weibo(blog_values=wbobj.get_pre_url_values, sp=sp)
print html
么,比如:把女神的照片全要了、自动查看女神的微博并将邮件发给你,下次再来弄这个。最近失眠的厉害,快点找到工作吧!!
python-微博模拟登陆的更多相关文章
- Python实现模拟登陆
大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...
- 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站
Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...
- python爬虫模拟登陆
python爬虫模拟登陆 学习了:https://www.cnblogs.com/chenxiaohan/p/7654667.html 用的这个 学习了:https://www.cnblogs.co ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- 腾讯微博模拟登陆+数据抓取(java实现)
不多说,贴出相关代码. 参数实体: package token.def; import java.io.Serializable; import java.util.Properties; publi ...
- python爬虫 模拟登陆校园网-初级
最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登 ...
- Python作业模拟登陆(第一周)
模拟登陆:1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 思路: 1. 用户名密码文件为passwd,锁定用户文件为lock 2. 用户输入账号密码采用i ...
- python+requests模拟登陆 学校选课系统
最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- Python脚本模拟登陆DVWA
目录 requests模拟登陆 Selenium自动化测试登陆 环境:python3.7 windows requests模拟登陆 我们登陆DVWA的时候,看似只有一步:访问网站,输入用户名和密码,登 ...
随机推荐
- 基于EF+WCF的通用三层架构及解析
分享基于EF+WCF的通用三层架构及解析 本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务 ...
- 【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字 ...
- Nginx+phpfastcgi下flush输出问题
最近由于业务需要,需要使用php的flush输出缓存刷新,处理浏览器超时问题. 最初的测试代码如下: ob_start();//打开缓冲区 for ($i=10; $i>0; $i--) { e ...
- Mysql中实现多表关联查询更新操作
今天一下要记录一下才行了,每次都要去网上查找方法,每次都难找得要命 Mysql在更新某些字段的数据时,有时候会依据其他表的数据进行更新,需要通过关联后对不同的行更新不同的值,传统的update set ...
- html5实现饼图和线图
html5实现饼图和线图-我们到底能走多远系列(34) 我们到底能走多远系列(34) 扯淡: 送给各位一段话: 人生是一个不断做加法的过程 从赤条条无牵无挂的来 到学会荣辱羞耻 ...
- javascript full screen 全屏显示 页面元素
javascript full screen 全屏显示 页面元素 要想让页面的某个元素全屏显示,就像在网页上看视频的时候,可以全屏观看一样,该怎么实现呢? 一种最简单的方式,就是动态改变你想要全屏显示 ...
- easyuidatagrid扩展--玩一下,无实际意义
直接上代码 $.extend($.fn.datagrid.defaults.editors, { operater: { init: function (container, options) { v ...
- Java菜鸟学习笔记--面向对象篇(十六):Object类方法
Object类 什么是Object类? Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类 ...
- TCP可靠传输的实现
TCP可靠传输的实现 1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的.为了 ...
- WCFRESTFul服务搭建及实现增删改查
WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格, RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...