这里值得注意的几个地方是:
设置连接超时和请求超时,这两个超时的意义不同,需要分别设置。
响应状态码的处理。
返回的结果可以为字节数组,也可以为 InputStream,而后者在网页内容数据量较大的时候推荐使用。
在处理返回结果的时候可以根据自己的需要,进行相应的处理。如笔者是需要保存网页
到本地,因此就可以写一个 saveToLocaleFile(byte[] data, String filePath) 的方法,将字节数组保存成本地文件。后续的简易爬虫部分会有相应的介绍。
PostMethod
PostMethod 方法与 GetMethod 方法的使用步骤大体相同。但是由于 PostMethod 使用的是HTTP 的 Post 请求,因而请求参数的设置与 GetMethod 有所不同。在 GetMethod 中,请求的参数直接写在 URL 里,一般以这样形式出现:http://hostname:port//file?name1=value1&name2=value …。请求参数是 name,value 对。比如我想得到百度搜索“Thinking In Java”的结果网页,就可以使 GetMethod 的构造方法中的 url 为:http://www.baidu.com/s?wd=Thinking+In+Java 。而 PostMethod 则可以模拟网页里表单提交的过程,通过设置表单里 post 请求参数的值,来动态的获得返回的网页结果。清单 2 中的代码展示了如何创建一个 Post 对象,并设置相应的请求参数。
清单2
PostMethod postMethod = new PostMethod("http://dict.cn/");
postMethod.setRequestBody(new NameValuePair[]{new NameValuePair("q","java")});
HtmlParser 基本类库使用
HtmlParser 提供了强大的类库来处理 Internet 上的网页,可以实现对网页特定内容的提取和修改。下面通过几个例子来介绍 HtmlParser 的一些使用。这些例子其中的代码,有部分用在了后面介绍的简易爬虫中。以下所有的代码和方法都在在类 HtmlParser.Test.java 里,这是笔者编写的一个用来测试 HtmlParser 用法的类。
迭代遍历网页所有节点
网页是一个半结构化的嵌套文本文件,有类似 XML 文件的树形嵌套结构。使用HtmlParser 可以让我们轻易的迭代遍历网页的所有节点。清单 3 展示了如何来实现这个功能。
清单 3
// 循环访问所有节点,输出包含关键字的值节点
public static void extractKeyWordText(String url, String keyword) {
try {
//生成一个解析器对象,用网页的 url 作为参数
Parser parser = new Parser(url);
//设置网页的编码,这里只是请求了一个 gb2312 编码网页
parser.setEncoding("gb2312");
//迭代所有节点, null 表示不使用 NodeFilter
NodeList list = parser.parse(null);
//从初始的节点列表跌倒所有的节点
processNodeList(list, keyword);
} catch (ParserException e) {
e.printStackTrace();
}
}
private static void processNodeList(NodeList list, String keyword) {
//迭代开始
SimpleNodeIterator iterator = list.elements();
while (iterator.hasMoreNodes()) {
Node node = iterator.nextNode();
//得到该节点的子节点列表
NodeList childList = node.getChildren();
//孩子节点为空,说明是值节点
if (null == childList)
{
//得到值节点的值
String result = node.toPlainTextString();
//若包含关键字,则简单打印出来文本
if (result.indexOf(keyword) != -1)
System.out.println(result);
} //end if
//孩子节点不为空,继续迭代该孩子节点
else
{
processNodeList(childList, keyword);
}//end else
}//end wile
}
分享到:
相关推荐
在使用HttpClient和HtmlParser实现网络爬虫的过程中,首先需要设置开发环境。这里推荐使用Eclipse Europa作为集成开发环境(IDE),并确保安装了JDK 1.6。在Eclipse中创建一个新的JAVA工程,并将HttpClient和...
### 使用HttpClient和HtmlParser实现简易爬虫的知识点详解 #### 一、HttpClient与HtmlParser简介 **HttpClient简介:** HttpClient是Jakarta Commons项目中的一个重要组件,用于提供灵活且高效的HTTP协议支持。它...
### 使用HttpClient和HtmlParser实现简易爬虫 #### HttpClient与HtmlParser简介 在互联网技术领域,爬虫技术是一种非常重要的工具,被广泛应用于数据抓取、信息检索等方面。爬虫技术的核心在于能够高效地获取和...
本话题主要涉及三个关键库:HttpClient、jsoup以及HtmlParser和htmllexer。这些库为构建简单的Java爬虫提供了必要的工具和功能。 HttpClient是Apache基金会的一个开源项目,提供了用于执行HTTP请求的强大工具集。它...
`使用 HttpClient 和 HtmlParser 实现简易爬虫.mht`等文件可能包含了使用这两个库实现模拟登录和爬虫的实例。 6. **网页爬虫**:结合HttpClient和HTMLParser,可以构建简单的网页爬虫。`使用httpParser提取HTML中的...
在使用这些库构建简易爬虫时,通常的步骤如下: 1. **初始化HttpClient**:设置好代理、超时等配置,创建HttpClient实例。 2. **构建HTTP请求**:根据目标URL创建HttpGet或HttpPost对象,添加必要的请求头和参数。 ...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...