转载请注明出处!

原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006

有时候因为种种原因,我们须要採集某个站点的数据,但因为不同站点对数据的显示方式略有不同。

本文就用Java给大家演示怎样抓取站点的数据:(1)抓取原网页数据;(2)抓取网页Javascript返回的数据。

一、抓取原网页。

这个样例我们准备从http://ip.chinaz.com上抓取ip查询的结果:

第一步:打开这个网页。然后输入IP:111.142.55.73。点击查询button。就能够看到网页显示的结果:

第二步:查看网页源代码。我们看到源代码中有这么一段:

从这里能够看出。查询的结果,是又一次请求一个网页之后显示的。

再看看查询之后的网页地址:

也就是说。我们仅仅要訪问形如这种网址。就能够得到ip查询的结果,接下来看代码:

public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/? IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}

使用HttpURLConnection连接站点,用bufReader保存网页返回的数据,然后通过自己定义的一个解析方式将结果显示出来。

这里我仅仅是随便的解析了一下,要解析的很准确的话自己需再处理。

解析结果例如以下:

captureHtml()的结果:

查询结果[1]: 111.142.55.73 ==>> 1871591241 ==>> 福建省漳州市 移动</strong><br />

二、抓取网页JavaScript返回的结果。

有时候站点为了保护自己的数据。并没有把数据直接放在网页源代码中返回。而是採用异步的方式,用JS返回数据,这样能够避免搜索引擎等工具对站点数据的抓取。

首先看一下这个网页:

用第一种方式查看该网页的源代码。却没有发现该运单的跟踪信息,由于它是通过JS的方式获取结果的。

但有时候我们非常须要获取到JS的数据,这个时候要怎么办呢?

这个时候我们须要用到一个工具:HTTP Analyzer,这个工具能够截获Http的交互内容,我们通过这个工具来达到我们的目的。

首先点击Startbutton之后,它就開始监听网页的交互行为了。

我们打开网页:http://www.kiees.cn/sf.php ,能够看到HTTP Analyzer列出了全部该网页的请求数据以及结果:

为了更方便的查看JS的结果。我们先清空这些数据,然后再网页中输入快递单号:107818590577。点击查询button,然后查看HTTP Analyzer的结果:

这个就是点击查询button之后。HTTP Analyzer的结果,我们继续查看:

从上面两幅图中能够看出,HTTP Analyzer能够截获JS返回的数据,并在Response Content中显示,同一时候能够看到JS请求的网页地址。

既然如此,我们仅仅要分析HTTP Analyzer的结果,然后模拟JS的行为就可获取到数据。即我们仅仅要訪问JS请求的网页地址来获取数据,当然前提是这些数据是没有经过加密的,我们记下JS请求的URL:http://www.kiees.cn/sf.php?

wen=107818590577&channel=&rnd=0

然后让程序去请求这个网页的结果就可以!

以下是代码:

public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php? wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}

看到了吧,抓取JS的方式和前面抓取原网页的代码一模一样,我们仅仅只是做了一个分析JS的过程。

以下是程序运行的结果:

captureJavascript()的结果:

<div class="results"><div id="ali-itu-wl-result" class="ali-itu-wl-result"><h2 class="logisTitle">运单<span class="mail-no">【107818590577】</span>的跟踪信息</h2><div class="trace_result"><ul><li><span
class="time">2012-07-16 15:46:00</span><span class="info">已收件 </span></li><li><span class="time">2012-07-16 16:03:00</span><span class="info">快件在 广州\t,准备送往下一站广州集散中心 </span></li><li><span class="time">2012-07-16 19:33:00</span><span class="info">快件在 广州集散中心,准备送往下一站佛山集散中心
</span></li><li><span class="time">2012-07-17 01:56:00</span><span class="info">快件在 佛山集散中心\t,准备送往下一站佛山 </span></li><li><span class="time">2012-07-17 09:41:00</span><span class="info">正在派件.. </span></li><li><span class="time">2012-07-17 11:28:00</span><span
class="info">派件已签收 </span></li><li><span class="time">2012-07-17 11:28:00</span><span class="info">签收人是:已签收 </span></li></ul><div></div></div></div>  </div>

这些数据就是JS返回的结果了,我们的目的达到了!

我希望这能成为一个小朋友需要帮助,需要程序的源代码,点击这里下载

Java抓取网页数据(原来的页面+Javascript返回数据)的更多相关文章

  1. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

  2. Java抓取网页数据(原网页+Javascript返回数据)

    有时候由于种种原因,我们需要采集某个网站的数据,但由于不同网站对数据的显示方式略有不同! 本文就用Java给大家演示如何抓取网站的数据:(1)抓取原网页数据:(2)抓取网页Javascript返回的数 ...

  3. 使用JAVA抓取网页数据

    一.使用 HttpClient 抓取网页数据 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 ...

  4. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

  5. java 抓取网页图片

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  6. Java抓取网页数据

    http://ayang1588.github.io/blog/2013/04/08/catchdata/ 最近处于离职状态,正赶清闲,开始着手自己的毕业设计,课题定的是JavaWeb购物平台,打算用 ...

  7. 走过路过不要错过~教你用java抓取网页中你想要的东东~~

    学习了正则之后,打算用java玩一玩,所以就决定用它来实现一个好玩的idea import java.io.BufferedReader; import java.io.IOException; im ...

  8. java抓取网页或者文件的邮箱号码

    抓文件的 package reg; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.i ...

  9. Jsoup一个简短的引论——采用Java抓取网页数据

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...

随机推荐

  1. mysql启动的四种方式

    mysql的四种启动方式: .mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --def ...

  2. Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

    第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...

  3. 【Bootstrap3.0建站笔记一】表单元素排版

    1.文字和输入框前后排列: 代码: <div class="row"> <div class="col-lg-12"> <div ...

  4. 用 PS 复制权限

    用 PS 复制权限 我们要把源计算机上的文件权限复制到目的计算机上. get-acl .\s.txt | Export-Clixml sddl.xml 把 s.txt 文件的权限保存到 sddl.xm ...

  5. 【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画

    话说博客传图也太麻烦了吧,一个一个文件一个一个传....为什么不能直接粘贴了,自动上传呢... 刚直接粘贴了,结果一张图没有,又重新截一次图,在传了一次...真是太**了 好了,吐槽完了,开始博客吧 ...

  6. VS2010对C++11的支持列表(感觉大部分都不支持)

    c++11,就是之前的c++0x,已经成为了最新的c++标准.像咱这样天天用c++的,就赶紧follow一下.学习成果,放在这里,不说分享,至少自己增强下记忆. 首先,给出一些有用的链接. http: ...

  7. js ajax调用请求

    <pre name="code" class="html"> function getAppList(env){ var data = {}; da ...

  8. Swift初体验 (一)

    // 声明一个常量 let maxNumberOfStudents: Int = 47 // 声明一个变量,假设没有在声明的时候初始化,须要显示的标注其类型 var currentNumberOfSt ...

  9. ASP.NET - 匹配标签中的内容

    string str = @"<td>Csdn</td>\r\n<td>V1.0</td>\r\n<td>2014-10-23&l ...

  10. fzu 2035 Axial symmetry(枚举+几何)

    题目链接:fzu 2035 Axial symmetry 题目大意:给出n个点,表示n边形的n个顶点,判断该n边形是否为轴对称图形.(给出点按照图形的顺时针或逆时针给出. 解题思路:将相邻两个点的中点 ...