Java模拟新浪微博登陆抓取数据
2017-08-01 21:47
316 查看
原文传送门:http://www.cnblogs.com/longjin-java/p/6408360.html
前言:
兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以[b]今天有时间就整理整理,浅谈一二。[/b]
首先:
要想登陆新浪微博需要预登陆,即是将账号base64加密,密码rsa加密以及请求http://login.sina.com.cn/sso/prelogin.php链接获取一些登陆需要参数,返回的接送字符串如:
,接下来是预登陆处理代码:
其次:
获取登陆需要的参数后使用post请求http://login.sina.com.cn/sso/login.php,将上述预登陆后处理数据作为参数代入请求,得到结果如下:
然后用正则截取其中我们想要的部分:location.replace('')中间部分,正则表达式为:
将正则得到的结果进行处理,如果成功则使用get请求得到的链接,截取返回结果的括号部分得到一个json格式字符串:
,取出其中的uniqueid和userdomain用于访问个人主页,登陆部分的代码如下:
补充一下密码加密部分的代码:
/**
* @author LongJin
* @description 返回错误信息
* @return
*/
public String getErrInfo() {
return errInfo;
}
登陆部分就基本完成了。
最后来进行测试登陆抓取数据:
得到的结果为:
到此整个登陆就完成了,佛说,无私奉献是一种美德,所以博主将此篇博客分享给大家,用来共同学习进步,望有不足之处多提点。
前言:
兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以[b]今天有时间就整理整理,浅谈一二。[/b]
首先:
要想登陆新浪微博需要预登陆,即是将账号base64加密,密码rsa加密以及请求http://login.sina.com.cn/sso/prelogin.php链接获取一些登陆需要参数,返回的接送字符串如:
{"retcode":0,"servertime":1487292003,"pcid":"gz-9e1f24c9acdefb111e1c8078558c7d9c0bf2","nonce":"VHRDG1","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","is_openlock":0,"lm":1,"smsurl":"https:\/\/login.sina.com.cn\/sso\/msglogin?entry=weibo&mobile=18360903574&s=ea7a2e91c5f1d6da7f42aa87fe6963d0","showpin":0,"exectime":222}
,接下来是预登陆处理代码:
获取登陆需要的参数后使用post请求http://login.sina.com.cn/sso/login.php,将上述预登陆后处理数据作为参数代入请求,得到结果如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>新浪通行证</title> <script charset="utf-8" src="http://i.sso.sina.com.cn/js/ssologin.js"></script> </head> <body> 正在登录 ... <script> try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/passport.97973.com\/sso\/crossdomain?action=login&savestate=1518828005","http:\/\/passport.weibo.cn\/sso\/crossdomain?action=login&savestate=1"]});} catch(e){ var msg = e.message; var img = new Image(); var type = 1; img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type; }try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1518828005&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&ticket=ST-NTUwODg3MjkxMQ==-1487292005-gz-FF56C545999F864FC6C7AB86FCA9FA4A-1&retcode=0');});} catch(e){ var msg = e.message; var img = new Image(); var type = 2; img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type; } </script> </body> </html>
然后用正则截取其中我们想要的部分:location.replace('')中间部分,正则表达式为:
String regex = "location.replace\\('([\\s\\S]*?)'\\);";
将正则得到的结果进行处理,如果成功则使用get请求得到的链接,截取返回结果的括号部分得到一个json格式字符串:
{"result":true,"userinfo":{"uniqueid":"5508872911","userid":null,"displayname":null,"userdomain":"?wvr=5&lf=reg"}}
,取出其中的uniqueid和userdomain用于访问个人主页,登陆部分的代码如下:
* @author LongJin
* @description 返回错误信息
* @return
*/
public String getErrInfo() {
return errInfo;
}
登陆部分就基本完成了。
最后来进行测试登陆抓取数据:
text--------------我投给了"易建联" 这个选项。 #本土MVP# 本赛季常规赛最有价值球员(MVP)评选小组由中国篮协新闻委员会成员单位代表、俱乐部推荐的地方媒体代表组成,新浪拥有一票,我们将把粉丝们的意见发给篮协。 R本赛季本土MVP是? ????
到此整个登陆就完成了,佛说,无私奉献是一种美德,所以博主将此篇博客分享给大家,用来共同学习进步,望有不足之处多提点。
相关文章推荐
- Java模拟新浪微博登陆抓取数据
- 新浪微博模拟登陆+数据抓取(java实现)
- Java模拟新浪微博登陆抓取数据
- Java模拟新浪微博登陆抓取数据
- Java模拟登陆新浪微博抓取数据【转载】
- 腾讯微博模拟登陆+数据抓取(java实现)
- 新浪微博JAVA代码模拟登陆
- Java实现新浪微博模拟登陆
- 新浪微博数据抓取(java实现)
- cURL实现模拟登陆+抓取数据
- python requests 模拟登陆网站,抓取数据
- 使用JAVA实现模拟登陆并发送新浪微博(非调用新浪API)
- php curl模拟登陆抓取数据
- Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据
- 网页抓取,模拟登陆,抓取动态网页内容等过程中,所涉及的Headers信息,Cookie信息,POST数据的处理逻辑
- Java实现从正方教务系统抓取数据(一)--模拟登录
- java 通过模拟cookies登陆新浪微博
- 新浪微博模拟登陆 java
- POST获取网易博客数据(网页抓取,模拟登陆资料学习备份)
- java实现模拟登录itunes后台收入,抓取收入数据,校对收入