java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)

优采云 发布时间: 2022-01-23 00:13

  java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)

  最近因为需要,对用java爬取网页信息有了一点了解!

  这一次,我的任务是捕捉原创上面学生的期末考试!因为这个网页是用写的,所以有些细节我不太了解!所以我只知道一件事!因为我毕竟不是asp。

  现在让我们来看看详细的步骤吧!

  

  基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookies了解不多,所以就去查资料了!

  主要内容大概就是Session是应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成一个唯一的 SessionID,并以 SessionID 作为标识访问服务器端的 Session 存储空间。SessionID 数据保存到客户端并与 cookie 一起保存。当用户提交页面时,会将SessionID提交给服务器以访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,Session也会失效。

  此 cookie 中会话的 sessionid 值。而这个值是在用户登录的时候产生的!所以我们要模拟登录并获取这个值!

  现在来解释一下模拟登录中遇到的问题!首先我们要自己登录,观察登录界面需要传入哪些值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的评论元素。

  

  在这里我们看到了我们想要的信息!

  前三个变量不是很懂,就去看了大黄(同学,也是景红。我的目标之一!)用PHP爬取原创的课表博客

  %E5%A6%82%E4%BD%95%E6%8A%93%E5%8E%9F%E5%88%9B%E6%95%99%E5%8A%A1%E7%B3%BB%E7 %BB%9F%E7%9A%84%E8%AF%BE%E8%A1%A8/

  其中有一个链接用于描述这些参数。链接在这里

  Cbo_LX是上一页选中的“学生”!

  Txt_UserName 和 Txt_Password 是您前台传递的用户名和密码!

  而 Img_DL.x 和 Img_DL.y 应该是点击按钮时的坐标!这不是很有用!

  现在问题又来了!. . 中国人在这里!那你会不会发现过去传过来的编解码有错误!. . 测试后是真的!直接传的话是不能传到对应页面的!

  为这个问题纠结了很久!然后开始尝试不同的编码格式来改变“学生”。. . 最终问题并没有解决,反而激起了我对编解码的强烈好奇!所以在未来的日子里,我们会更加关注这方面的!下次要花一个星期研究这个!因为我上次发博客说要直播!但是我太忙了,没时间做!终于要删除这条微博了!所以下次如果有时间,就一起完成这两个吧!

  最后,我请了一位同学帮忙解决了这个问题!原来这里是设置头文件!

  

  这里的 Content-Type 没问题!

  还需要注意的是,前面提到的参数__viewstate会发生变化。这意味着每次登录都是不同的!我不明白,所以我检查了它。

  就是说这个值会根据控件的状态而变化!所以不同的用户登录方式不同!所以我们要截取这个值!每次请求获取页面后,获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。

  最后但并非最不重要的是,一件非常烦人的事情!按照页面的步骤一步步模拟!最后发现中间有些页面根本不需要模拟!. . . 行!我是智障!但是奖励还是蛮大的!

  最后是拿到数据之后。转换下一个!因为我得到的是String数据,所以必须转成json格式!于是艰苦的工作又开始了!由于对json一窍不通,终于根据demo弄明白了!目前总结了json map添加的键值对,分别对应一个对象和一个对象名!如果map的值是一个数组,那么这对应json中的一个数组!如果使用bean方法,就相当于一个对象里面有很多属性!上级最后的请求就是这样的格式!. . . 可能是我的代码不是很好!所以当我使用前两种方法时!逻辑有点乱!

  代码先上传到百度云盘。有需要的朋友可以下去看看!

  好了,今天就写到这里吧!. .

  // 八卦

  报告材料。. 今天小白真的又变成了小白

<p>import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import net.sf.json.JSONArray;

public class TestString {

public static void main(String[] args){

Map map = new HashMap();

List list = new ArrayList();

String[] a = new String[3];

a[0]="0";

a[1]="1";

a[2]="2";

map.put("2", a);

for(int i=0;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线