asp.net 抓取网页数据(Google浏览器模拟登陆所遇到的问题,你知道吗?)
优采云 发布时间: 2021-09-30 23:05asp.net 抓取网页数据(Google浏览器模拟登陆所遇到的问题,你知道吗?)
最近因为需要,学了一点用java抓取网页信息!
我这次分配的任务是抢原创以上同学的期末考试时间表!因为这个网页是写的,所以有些细节我不是很了解!所以我只知道一个粗略的想法!因为毕竟我不是搞asp的。
下面我们就来了解下详细步骤吧!
基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookie不是很了解,所以查了一下资料!
主要内容大概就是Session是一个由应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成唯一的SessionID,并以SessionID作为标识访问服务器端的Session存储空间。SessionID 数据保存到客户端并与 Cookie 一起保存。当用户提交页面时,SessionID会提交给服务器访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,会话也会失效。
该cookie中seesion的sessionid值。而这个值是在用户登录的时候生成的!所以我们必须模拟登录然后抓取这个值!
下面我们来讲解一下模拟登录遇到的问题!首先我们要自己登录,观察登录界面需要传递什么值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的review元素。
在这里我们看到了我们想要的信息!
前三个变量没看懂,所以去看了大黄(一个同学,也是景洪。我的目标之一!)用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 应该是你点击按钮时的坐标!这不是很有用!
现在问题又来了!. . 中国人在这里参与!那你会不会发现过去的编解码有错误呢?. . 实验后果然!如果直接发帖,是不能发到对应页面的!
纠结这个问题好久了!然后开始尝试用不同的编码格式来改变“学生”。. . 最终问题没有解决,却引起了我对编解码的强烈好奇!所以以后我会更加关注这方面的!下次我打算花一个星期来研究这个!自从上次发了个博客想搞直播!但是实在是太忙了,没有做!最后,这条微博千万不能删!所以如果你下次有时间,一起完成这两个!
最后请了一位同学帮忙解决这个问题!原来头文件要设置在这里!
这里的内容类型,没关系!
还要注意的是,在前面提到的参数 __viewstate 中,这可能会发生变化。也就是说,每次登录都不一样!没看懂,查了资料
这意味着这个值会根据控件的状态而变化!所以不同的用户登录是不同的!所以我们要截取这个值!每次请求获取页面后获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。
最后,我要说一句伤人的话!按照页面上的步骤一步步模拟!终于发现中间有些页面根本不需要模拟!. . . 好的!我是智障!但是收获还是蛮大的!
最后一件事是在获得数据之后。切换到下一个!因为我得到的是String数据,所以必须转成json格式!所以是时候重新开始艰苦的生活了!我对 json 一无所知,但我最终根据演示对它进行了修补!目前json map添加的key-value对分别对应一个对象和对象名!如果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