`

使用 HttpClient 和 HtmlParser 实现简易爬虫(二)

阅读更多

这里值得注意的几个地方是:

  设置连接超时和请求超时,这两个超时的意义不同,需要分别设置。

  响应状态码的处理。

  返回的结果可以为字节数组,也可以为 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 实现简易网络爬虫

    在使用HttpClient和HtmlParser实现网络爬虫的过程中,首先需要设置开发环境。这里推荐使用Eclipse Europa作为集成开发环境(IDE),并确保安装了JDK 1.6。在Eclipse中创建一个新的JAVA工程,并将HttpClient和...

    使用 HttpClient 和 HtmlParser 实现简易爬虫

    ### 使用HttpClient和HtmlParser实现简易爬虫的知识点详解 #### 一、HttpClient与HtmlParser简介 **HttpClient简介:** HttpClient是Jakarta Commons项目中的一个重要组件,用于提供灵活且高效的HTTP协议支持。它...

    使用_HttpClient_和_HtmlParser_实现简易爬虫

    ### 使用HttpClient和HtmlParser实现简易爬虫 #### HttpClient与HtmlParser简介 在互联网技术领域,爬虫技术是一种非常重要的工具,被广泛应用于数据抓取、信息检索等方面。爬虫技术的核心在于能够高效地获取和...

    HttpClient ,jsoup和 HtmlParser ,htmllexer实现简易爬虫用到的jar包

    本话题主要涉及三个关键库:HttpClient、jsoup以及HtmlParser和htmllexer。这些库为构建简单的Java爬虫提供了必要的工具和功能。 HttpClient是Apache基金会的一个开源项目,提供了用于执行HTTP请求的强大工具集。它...

    java实现模拟登录网站最全的资料

    `使用 HttpClient 和 HtmlParser 实现简易爬虫.mht`等文件可能包含了使用这两个库实现模拟登录和爬虫的实例。 6. **网页爬虫**:结合HttpClient和HTMLParser,可以构建简单的网页爬虫。`使用httpParser提取HTML中的...

    Commons-httpClient3.1.Jar,htmllexer.jar,htmlparser.jar

    在使用这些库构建简易爬虫时,通常的步骤如下: 1. **初始化HttpClient**:设置好代理、超时等配置,创建HttpClient实例。 2. **构建HTTP请求**:根据目标URL创建HttpGet或HttpPost对象,添加必要的请求头和参数。 ...

    java开源包3

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包4

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包8

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包1

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包11

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包2

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包6

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包5

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包10

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包7

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包9

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

Global site tag (gtag.js) - Google Analytics