最近,由于实验设计需要,需要大量抓取微博中的数据,
在采取了一些网友的建议下,我试着写了一个Java程序配合HTMLparser去抓取新浪微博手机版页面的数据。
但是,在抓取用户页面中的数据时,意外遇到了需要本人先登录后才能访问他人页面的问题。
为了解决登录问题,我查取了大量资料。似乎HttpClient能配合实现自动登录。
但是,新浪微博手机版的登录框却是一个很特别的登录设计,
请看代码高亮部分。
<form action="login_submit.php?rand=1615712919&backURL=http%3A%2F%2Fm.weibo.com%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt=4&revalid=2&ns=1" method="post"> <div class="mg"> 手机号/电子邮箱/会员帐号:<br/><input type="text" name="mobile" size="30" value=""/> <br/> 密码:(<a href="login.php?backURL=http%3A%2F%2Fm.weibo.com%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt=4&revalid=2&ns=1&pt=1">使用明文密码</a>)<br/> <input type="password" name="password_7069" size="30" value=""/><br/> <input type="checkbox" name="remember" checked="checked" />记住登录状态,需支持并打开手机的cookie功能。<br/> <input type="hidden" name="backURL" value="http://m.weibo.com/" /> <input type="hidden" name="backTitle" value="新浪微博" /> <input type="hidden" name="backURL" value="http://m.weibo.com/" /><input type="hidden" name="vk" value="7069_6c29_2038971687" /> <input type="submit" name="submit" value="登录" /><br/>
这里,账号的输入名很普通,是个固定的名称;但是,密码输入框就不一样了,它的名称是个动态生成的,而且每次访问后得到的结果都不一样。
请问在解决这个问题上该怎样处理的?下面的问号是怎样解决的?谢谢!
HttpClient client = new HttpClient();
PostMethod post_method = new PostMethod("http://3g.sina.com.cn/prog/wapsite/sso/login.php?ns=1&revalid=2&backURL=http%3A%2F%2Fm.weibo.com%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt=");
NameValuePair[] data = {
new NameValuePair("mobile", "....@sina.com"),
new NameValuePair("????", "password"),
};
post_method.setRequestBody(data);
你想抓取哪些数据?匿名抓页面的还是登陆再抓取?
用HttpClient不如直接用微博API来的快了,得到的都是纯数据,不需要从页面提取。
给个以前写的匿名获取最新发布微博示例(JS API):