Jsoup登录解析网页信息

jopen 8年前

今天解析网页的时候,遇到必须登录后才能够访问的问题,在网上搜索了一些资料,反正有人做出来了,不过是使用HttpClient+Jsoup来实现的,我不清楚他们使用什么版本的Jsoup,地址:



HttpClient模拟登陆人人网,并且爬取日志内容(一)http://bbs.csdn.net/topics/390269063,查看现在的Jsoup API,可以直接模拟登陆,获取服务器返回的信息。

我这里是使用水木社区做Demo,其中下面的id和passwd分别是提交form表单中用户名和密码的input的name

<form action="/user/login" method="post">   <ul class="sec">    <li>用户名:<br/><input type="text" name="id" /></li>    <li>密码:<br/><input type="password" name="passwd" /></li>    <li><input type="checkbox" name="save" />记住我<br/>    <input type="submit" class="btn" value="登录" /></li>   </ul>  </form>

Map<String, String> map = new HashMap<String, String>();   map.put("id", "****");   map.put("passwd", "****");   Response response = Jsoup.connect("http://m.newsmth.net/user/login")       .data(map)       .method(Method.POST)       .timeout(20000)       .execute();   if (response.statusCode() == 200) {    SmthApp.getInstance().setCookies(response.cookies());   }

其中Response里面就有我们需要的Cookie,获取的方式为response.cookies()返回类型是Map,下面是获取浏览器登录返回的Cookie内容,同样我们获取的Cookies也是这些内容。

Set-Cookie:main[UTMPUSERID]=***; path=/; domain=.newsmth.net  Set-Cookie:main[UTMPKEY]=97311264; path=/; domain=.newsmth.net  Set-Cookie:main[UTMPUSERID]=guest; path=/; domain=.newsmth.net  Set-Cookie:main[PASSWORD]=%2501g2VSVO%257D%2507%251DW%253B%2524K%2B%251C%2500a%2502%2501%257DF%2505X; path=/; domain=.newsmth.net  Set-Cookie:main[UTMPNUM]=9967; path=/; domain=.newsmth.net  Set-Cookie:main[UTMPKEY]=68252570; path=/; domain=.newsmth.net  Set-Cookie:main[UTMPNUM]=37535; path=/; domain=.newsmth.net
当解析需要登陆的页面时,
Document document = Jsoup.connect(url).      timeout(20000).      cookies(SmthApp.getInstance().getCookies())//这个就是上面获取的cookies      .get();
这样就可以模拟登陆解析页面,需要注意的是这个是有时间限制的,当失效后再次请求获取最新的Cookie。


来自: http://blog.csdn.net/jwzhangjie/article/details/27339487