文档章节

网络爬虫

 啥都别说了
发布于 2015/04/28 14:40
字数 1925
阅读 226
收藏 3

一、首先你要知道什么是抓包

抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全,但往往被某些无耻之徒用来网游作弊。

这是我大三上学期通过抓包做的小型教务系统--La吧(喇叭),可以查成绩,查所有班级的课表,公告栏,机构通知,图书馆查询书籍,查询借书情况、意见反馈等等的功能。后台数据通过Bmob移动后端云服务进行数据存储。

下面就让我通过我做的小项目进行阐述如何抓包吧。

二、你所需要的工具

抓取数据的分析工具有很多,不同浏览器也自带很多开发人员工具,如果你的是IE内核的浏览器的话,比如360安全浏览器,你可以安装一个HttpWatch,相对web开发的人员来说对这个工具很熟悉,HttpWatch是一款强大的网页数据分析工具。集成在Internet Explorer工具栏。包括网页摘要。Cookies管理。缓存管理。消息头发送/接受。字符查询。

如果你的是Firefox火狐浏览器的话,恭喜你,它里面自带了一个比较好用的工具firebug,它的功能是和HttpWatch差不多,区别不大,我就是用Firefox自带的工具进行抓包分析的。

下面就让我用图片展示firebug的安装吧:

 

 

 

 三、你最关心的代码实现。

我做的作品是通过抓取我校(广东石油化工学院)的教务系统的数据进行分析和操作的,看到图片上的我画的,诶,是不是真是你想做和抓取的呀?

 

好了,现在要用的firebug终于到场了,我们点击浏览器小虫子的图标,或者直接按下F12快捷键,便出现这个页面,这个页面正是我们所需要的抓包分析页面。

有木有很激动,看到数据了没有?这些数据正是我们所需要的抓取的数据。

但是问题来了。我是先登录才能到这个页面的啊。

其实我们登陆时是通过cookie进行验证的,如果返回的cookie不为null,那么则是登陆成功

那么问题来了。我要怎么才能到到cookie了。cookie其实就相当于我们的身份证一样,里面有唯一的信息。不多说,直接上代码:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
   
  /**
   * 登录时得到cookie
   * @param xueHao 学号,即是登陆账号
   * @param password 登陆密码
   * @return
   */
  public  List<Cookie> getCookie(String xueHao,String password) {
    List<Cookie> cookies =  null // 保存获取的cookie
   try  {
    HttpClient client =  new  DefaultHttpClient();
    String uriAPI =  "http://218.15.22.136:3008/" ;
    HttpPost httpPost =  new  HttpPost(uriAPI);
    List<NameValuePair> params =  new  ArrayList<NameValuePair>();
    params.add( new  BasicNameValuePair(
      "Window1$SimpleForm1$rdl_shenFen" "学生" ));
    params.add( new  BasicNameValuePair( "Window1$SimpleForm1$tbx_XueHao" ,
      xueHao));
    params.add( new  BasicNameValuePair( "Window1$SimpleForm1$tbx_pwd" ,
      password));
    params.add( new  BasicNameValuePair( "Window1_Collapsed" "false" ));
    params.add( new  BasicNameValuePair( "Window1_Hidden" "false" ));
    params.add( new  BasicNameValuePair( "Window1_SimpleForm1_Collapsed" ,
      "false" ));
    params.add( new  BasicNameValuePair( "X_AJAX" "true" ));
    params.add( new  BasicNameValuePair( "X_CHANGED" "true" ));
    params.add( new  BasicNameValuePair( "X_STATE" "e30=" ));
    params.add( new  BasicNameValuePair( "X_TARGET" ,
      "Window1_Toolbar1_btn_login" ));
    params.add( new  BasicNameValuePair( "__EVENTARGUMENT" "" ));
    params.add( new  BasicNameValuePair( "__EVENTTARGET" ,
      "Window1$Toolbar1$btn_login" ));
    // 发出HTTP request
    httpPost.setEntity( new  UrlEncodedFormEntity(params, HTTP.UTF_8));
    // 取得HTTP response
    HttpResponse httpResponse = client.execute(httpPost);  // 执行
    // 若状态码为200 ok
    if  (httpResponse.getStatusLine().getStatusCode() ==  200 ) {  // 返回值正常
     // 获取返回的cookie
     cookies = ((AbstractHttpClient) client).getCookieStore()
       .getCookies();
     //System.out.println("cookies=" + cookies);
     if  (cookies.isEmpty())
      System.out.println( "cookies empty" );
    else  {
    }
   catch  (Exception e) {
    System.out.println( "getCookie error:"  + e);
   }
   return  cookies;
  }

你会问params.add(new BasicNameValuePair("X_AJAX", "true")) 这些东西是什么啊?别急!再看图 

 怎么样?懂了吧?其实就是post传带的参数。

ok,进入系统之后,我们就要对自己感兴趣的数据进行抓取了,继续如图:

选择自己想要抓取的页面,点击cookies可以知道,我自己已经登陆,cookie不为空。点击响应可以看到

 

自己想要抓取的数据已经存在,不难发现自己想要数据部分是以json的形式显示出来的,现在就是得到这些数据进行分解抓取了。你会说,这个什么东西,我看不懂,看不懂没关系,你只要数据就行了,对于这响应的数据,其实是asp的格式而已,如果点击的网页时htmll的话,那么响应的便是html,同样是可以进行解析的。

那怎么得到这个页面呢,先看代码,再解释吧:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   /**
   * 得到成绩数据
   */
  public  ArrayList<HashMap<String, Object>> getMyGrade(List<Cookie> cookies) {
   String result =  null ;
   ArrayList<HashMap<String, Object>> list =  null ;
   String uriPath =  "http://218.15.22.136:3008/ChengJiChaXun.aspx" ;
   try  {
    HttpPost httpPost =  new  HttpPost(uriPath);
    httpPost.setHeader( "Cookie" "ASP.NET_SessionId="
      + cookies.get( 0 ).getValue() +  ";XingMing="
      + cookies.get( 1 ).getValue());
    HttpResponse httpResponse =  new  DefaultHttpClient()
      .execute(httpPost);
    if  (httpResponse.getStatusLine().getStatusCode() ==  200 ) {
     result = EntityUtils.toString(httpResponse.getEntity());
     if  (result !=  null  && !result.isEmpty()) {
      list =  new  ArrayList<HashMap<String, Object>>();
      list = toGradeData(result);
     }
    }
   catch  (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   catch  (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return  list;
  }

首先呢,你的得到你想要抓取的页面的地址,如http://218.15.22.136:3008/ChengJiChaXun.aspx,但是这仅仅是不够的,因为你要告诉系统的你的身份,不然谁都可以查分数了。没错,你要把cookie的内容传到系统中, httpPost.setHeader("Cookie", "ASP.NET_SessionId="  + cookies.get(0).getValue() + ";XingMing=" + cookies.get(1).getValue());让系统知道你是否有权限查询数据。不多说,看下图:

当然代码中的  list = toGradeData(result)你可能看不懂,这是我自己写的获取我需要的数据的方法,最后把数据装进ArrayList<HashMap<String,Object>>中返回,那么接下来,你应该知道怎么做了吧?和listview绑定,就可以把数据显示在手机界面了。如图:

当然,我的项目做了消息通知,公告栏,机构通知,如图:

 那么我是怎么做的呢?

在这里。我就得向大家介绍一个很好用的移动云服务器了。Bmob移动后端云服务,它是一个非常好用的免费的云数据库,我们做的项目如果不能联网获取数据那么这样的应用是没人用的,或者说是失败的,但是联网得到数据我们得有服务器啊,一般个人开发者是没有自己的服务器,特别是学生来说更是如此,但是,现在你不用担忧了,Bmob可以帮你搞定所有的繁琐的后台开发,而让你更有时间和精力去开发你的应用。

具体我不多说,免得以为我在打广告,如果自己感兴趣的话,可以到Bmob官网了解。

首先来看,上图的数据我并不是存在SQLite的,也不是存在文件中的,我是直接通过联网从我的云服务中得到的,一旦我的云服务器中的数据有改变,我下拉就可以得到最新消息。便可以做到类似新闻一样的消息通知了。

大家请看我后台的云端数据库

 

 

怎么样?不错吧?其实你看Bmob的文档,你会发现,其实这些都不难,代码说真的挺简单的。里面可以设置自己应用的的官网之类的一堆功能,建议都去看看吧,相信你们能做的更好更厉害。这个就是我在Bmob中下载我的应用的官网http://downloadlaba.bmob.cn

最后呢,希望我写的这些对你们有帮助吧,尊重原创,转发请写上原创地址。谢谢啦~如有疑问欢迎245105136@qq.com

本文转载自:http://my.oschina.net/jiayouzsj/blog/405220

粉丝 1
博文 4
码字总数 1498
作品 0
广州
私信 提问
什么是网络爬虫?有什么用?怎么爬?一篇文章带你领略python爬虫的魅力

网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会...

急速奔跑中的蜗牛
05/18
0
0
精通Python网络爬虫-书籍介绍

 内容简介 本书从技术、工具与实战3个维度讲解了Python网络爬虫: 技术维度:详细讲解了Python网络爬虫实现的核心技术,包括网络爬虫的工作原理、如何用urllib库编写网络爬虫、爬虫的异常...

weiwei_pig
2017/04/09
0
0
Python爬虫(1.爬虫的基本概念)

爬虫的基本概念 1. 网络爬虫的组成 网络爬虫由控制结点、爬虫结点、资源库构成,如图1 所示: 图1 网络爬虫的控制节点和爬虫节点结构的关系 可以看到,网络爬虫中可以有多个控制节点,每个控...

lhs322
2018/04/20
0
0
网络爬虫,如何做到 “盗亦有道” ?

网络爬虫的实质,其实是从网络上“偷”数据。通过网络爬虫,我们可以采集到所需要的资源,但是同样,使用不当也可能会引发一些比较严重的问题。 因此,在使用网络爬虫时,我们需要做到“盗亦...

bestdwd
2017/06/09
0
0
Tomcat和搜索引擎网络爬虫的攻防

不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。 咱们程序员假如自己搭设个人网站,在上面分享少量自己的技术...

jerrywangsap
2018/09/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

拥有有趣灵魂的程序员们,程序员访谈(一)

点击上方关注我们,让小care关爱你! 程序员群体一直都是低调多金的代表,而近段时间以来,程序员在网络上除了高薪之外,总是会和屌丝、苦逼、格子衫、没情趣...联系在一起。黑程序员的段子也...

ITCare
今天
23
0
Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
13
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
13
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
今天
26
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部