//转自:chenqi19831112/archive/2008/11/07/3248863.aspx

Jericho HTML Parser是一个简单而功能强大的Java HTML解析器库,可以分析和处理HTML文档的一部分,包括一些通用的服务器端标签,同时也可以重新生成无法识别的或无效的HTML。它也提供了一个有用的HTML表单分析器。
  下载地址:[url]http://sourceforge.net/project/showfiles.php?group_id=101067[/url]

HttpClient作为HTTP客户端组件与服务器进行通讯,同时使用了jdom进行XML数据的解析。

* HttpClient 可以在[url]http://jakarta.apache.org/commons/httpclient/downloads.html[/url]下载
    * HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址[url]http://jakarta.apache.org/site/downloads[/url] /downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中
    * HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址[url]http://jakarta.apache.org/site/downloads[/url] /downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中

在对网页信息进行抓取时,主要会用到GET 方法

使用 HttpClient 需要以下 6 个步骤:

1. 创建 HttpClient 的实例

2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

4. 读 response

5. 释放连接。无论执行方法是否成功,都必须释放连接

6. 对得到后的内容进行处理
在eclipse下建立工程 -->snatch
将上面下载的四个jar文件导入到项目路径中.
环境搭建完成

现在,首先介绍一下HttpClient的使用
在工程目录下创建test包,在包中创建Httpclient Test类

package test;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class HttpClientTest...{
    public static void main(String[] args) {
    //构造HttpClient的实例
    HttpClient httpClient = new HttpClient();
    //创建GET方法的实例
    GetMethod getMethod = new GetMethod("http://www.google.com.cn");
    //使用系统提供的默认的恢复策略
    getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
        new DefaultHttpMethodRetryHandler());
    try {
     //执行getMethod
     int statusCode = httpClient.executeMethod(getMethod);
     if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: "
            + getMethod.getStatusLine());
     }
     //读取内容
     byte[] responseBody = getMethod.getResponseBoy();
     //处理内容
     System.out.println(new String(responseBody));
    } catch (HttpException e) {
     //发生致命的异常,可能是协议不对或者返回的内容有问题
     System.out.println("Please check your provided http address!");
     e.printStackTrace();
    } catch (IOException e) {
     //发生网络异常
     e.printStackTrace();
    } finally {
     //释放连接
     getMethod.releaseConnection();
    }
}
}

这样得到的是页面的源代码.
这里 byte[] responseBody = getMethod.getResponseBoy();是读取内容
除此之外,我们还可以这样读取:
InputStream inputStream=   getMethod.getResponseBodyAsStream();
String responseBody = getMethod.getResponseBodyAsString();

下面结合两者给个事例
取出[url]http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.html[/url]
中"信息快递"栏的前几条信息.
新建类CourtNews

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

import au.id.jericho.lib.html.Element;
import au.id.jericho.lib.html.HTMLElementName;
import au.id.jericho.lib.html.Segment;
import au.id.jericho.lib.html.Source;

/** *//**
* @author oscar 07-5-17
*
*/
public class CourtNews {
        private int newsCount = 3;

private List newsList = new ArrayList();

public int getNewsCount() {
                return newsCount;
        }

public void setNewsCount(int newsCount) {
                this.newsCount = newsCount;
        }

public List getNewsList() {
                HttpClient httpClient = new HttpClient();
                GetMethod getMethod = new GetMethod(
                                "http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.html");
                getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                                new DefaultHttpMethodRetryHandler());

try {
                        int statusCode = httpClient.executeMethod(getMethod);
                        if (statusCode != HttpStatus.SC_OK) {
                                System.err
                                                .println("Method failed:" + getMethod.getStatusLine());
                        }

String responseBody = getMethod.getResponseBodyAsString();
                        responseBody = new String(responseBody.getBytes("ISO-8859-1"),
                                        "GB2312");
                        Source source = new Source(responseBody);

int tableCount = 0;

for (Iterator i = source.findAllElements(HTMLElementName.TABLE)
                                        .iterator(); i.hasNext(); tableCount++) {

Segment segment = (Segment) i.next();

if (tableCount == 13) {

int hrefCount = 0;
                                        for (Iterator j = segment
                                                        .findAllElements(HTMLElementName.A).iterator(); j
                                                        .hasNext();) {
                                                Segment childsegment = (Segment) j.next();
                                                String title = childsegment.extractText();
                                                title.replace(" ", " ");
                                                title = trimTitle(title);
                                                Element childelement = (Element) childsegment;
                                                if (hrefCount < newsCount) {

String[] news = new String[] {
                                                                        title,
                                                                        "http://www.ahcourt.gov.cn"
                                                                                        + childelement
                                                                                                        .getAttributeValue("href") };
                                                        newsList.add(news);
                                                        hrefCount++;
                                                }
                                        }

}
                        }
                } catch (HttpException e) {
                        System.out.println("please check your provided http address!");
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        getMethod.releaseConnection();
                }
                return newsList;
        }

private String trimTitle(String title) {
                String titlenew = "";

for (int i = 0; i < title.length(); i++) {

if (Character.isSpaceChar(title.charAt(i)))
                                titlenew += " ";
                        else {
                                titlenew += title.charAt(i);
                        }

}
                return titlenew;
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                CourtNews justice = new CourtNews();
                justice.setNewsCount(4);
                List list = justice.getNewsList();
                Iterator it = list.iterator();
                while (it.hasNext()) {
                        String[] news = (String[]) it.next();
                        System.out.println(news[0]);
                        System.out.println(news[1]);
        }
        }

}

转载于:https://blog.51cto.com/topstar/138284

HttpClient+Jericho HTML Parser 实现网页的抓取相关推荐

  1. 网页爬虫,HttpClient+Jericho HTML Parser 实现网页的抓取

    Jericho HTML Parser是一个简单而功能强大的Java HTML解析器库,可以分析和处理HTML文档的一部分,包括一些通用的服务器端标签,同时也可以重新生成无法识别的或无效的HTML.它 ...

  2. Android登录客户端,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,如果一个App不接入互联网,那么这个App一定不会有长时间的生命周期,因此Android网络编程是每一个Android开发者必备的技能,博主是在校大学生,自学 ...

  3. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文

    [Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...

  4. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取 ...

  5. python——爬虫实现网页信息抓取

    首先实现关于网页解析.读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用readline方法读某个网站,比如说百度 de ...

  6. 网页数据抓取-网页实时数据抓取软件

    网页数据抓取,随着社会的发展,互联网的普及,不管是企业还是个人都意识到数据的重要性.今天给大家分享一款免费的网页数据抓取软件.只要点点鼠标就能轻松采集你想要的内容不管是导出还是自动发布都支持!详细参考 ...

  7. 1.3 网页数据抓取

    1.3 网页数据抓取 李沐 B站:https://space.bilibili.com/1567748478/channel/collectiondetail?sid=28144 课程主页:https ...

  8. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

  9. 李沐【实用机器学习】1.3网页数据抓取

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.数据抓取工具 二.实例解析 总结 前言 网页数据抓取目标:在一个网站里面感兴趣的数据抓取出来 数据特点:噪点较多, ...

最新文章

  1. 先搞清楚了任务究竟是什么再说
  2. 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码
  3. OpenCV:Surface Matching 3D
  4. 微信小程序实现分类菜单 swiper分类菜单
  5. 简述WebService与.NET Remoting的区别及适应场合
  6. where、having、group by、order by、limit的区别和使用顺序
  7. 9999元起!荣耀Magic V今日首销:首款骁龙8折叠屏旗舰
  8. Unity Shader 噪声消融特效 - 剑灵死亡特效
  9. PPT常见的几种排版技巧,你都掌握了吗?
  10. plecs使用C-Script模块建立PI传递函数模型
  11. java开发文档怎么写?教你写java技术文档
  12. 多张png\jpg图片转化为一张pdf
  13. 小程序——scroll-view 页面不滚动与隐藏导航条
  14. 桌面的计算机图标误删了怎么恢复,删除桌面图标-如何恢复桌面图标不小心将某个程序的桌面图标给删了,怎么恢复呢 爱问知识人...
  15. 风险回避、减轻、转移、接受,汇率风险
  16. Python实现猜拳游戏
  17. 再谈斐波那契,把数字翻译成字符串
  18. 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。
  19. java设计模式有哪些(java设计模式刘伟课后答案)
  20. 十进制转换成二进制——C语言

热门文章

  1. 智能工厂4.0:数字世界和物理世界的融合【附下载】
  2. 恐惧、野心和迷茫,机器人公民背后的未来世界
  3. 余承东:华为 P50 系列无 5G 版本,但依然流畅
  4. 这个勒索软件也太菜了!
  5. 任正非:明年至少招聘 8000 名应届生,华为人才将分为三类
  6. Bittrex交易所宣布:BCH正式加入美元交易市场
  7. 简单团队-爬取豆瓣电影TOP250-需求分析
  8. 人人都在说SaaS热,客服领域里的SaaS巨头可能长什么样呢
  9. Python Day Eleven
  10. Javascript的原型链、instanceof与typeof