前一篇是写爬取静态网页的数据,但是在现实的生活中,我们多数浏览的是动态网页,在爬取动态网页我们需要了解cookie是什么,因为我们通过cookie来让网站知道我们是已经通过网站的登录验证的。
原理:我们在第一次获取登录表单数据并携带用户的信息去仿登录,成功后我们可以获取登录后的cookie信息,以便我们爬取登录后其他网页的数据。
使用cookie的原因:在http协议是无状态的,传统服务器只能被动响应请求,每当服务器获取到请求,并为了能够区分每一个客户端,需要客户端发送请求时发送一个标识符(cookie)。也就是说用来区分客户端的用户。
服务器根据报文中cookie,进行区分客户端浏览器.
第一步:我们需要了解登录网页的表单的数据,它具体发出的请求有什么数据,其实大多数都是账号和密码,我们可以按F12查看源码,看到源码就知道,提交的from表单就是两个参数。
第二步:我们登录进系统看看请求的内容,登录网站按F12,查看网络信息,如图
在network中我们在找到登录表单就是5个参数,前面三个基本不用管,因为它是浏览器可以生成的,我们只注意username和password这两个参数,它是我们登录提交过来的数据。还要获取的是登录后的url,因为有些是用重定向来跳转页面的,所以我们可以在登录成功后的页面单击鼠标右键点查看网页源代码,这样就可以知道网站登录后的真实url。
编写代码:
Document d= Jsoup.connect("登录的url").get();
//获取仿登录的数据
String inputName=d.getElementsByTag("input").get(0).attr("name");
String inputValue=d.getElementsByTag("input").get(0).val();
String random=d.getElementById("random").val();
String token=d.getElementById("token").val();
//用map来存储数据
Map map=new HashMap();
map.put(inputName,inputValue);
map.put("random",random);
map.put("token",token);
map.put("username",userName);
map.put("password",password);
//登录,获取cookies
Connection.Response login=Jsoup.connect("提交登录的url")
.ignoreContentType(true)
.followRedirects(true)
.data(map)
.method(Connection.Method.POST)
.execute()
.charset("utf-8");
//模拟成功后,自己想获取的数据,并且要求携带cookies数据
Document index=Jsoup.connect("登录后想获取数据的url").cookies(login.cookies()).get();
//打印数据网页
System.out.println(index.html());
就这样,模拟登录网站爬取数据就完成了。具体的数据要自己发挥,重点是分析网页的源代码,才可以快速的获取自己想要的数据。
nice!!!