`

利用HtmlParser进行网页信息提取[原创]

    博客分类:
  • HTML
阅读更多

1.1 概述

在开发工作中,往往有些需求是需要获取某些网页中的内容。针对这一问题,目前可以采用先获取网页内容,然后对网页内容进行解析,并重新排版的方式来解决。

1.2 资源

   1 JDK 1.5.06

   2)  HTMLParser2.0

地址:http://sourceforge.net/project/showfiles.php?group_id=24399&package_id=47712

2 对网页内容的获取和解析

2.1 HTTPLook的使用

    在我们模仿IE访问之前,我们首先需要知道每次请求的包头信息和请求方式以及发送的内容,并且需要知道,响应包的包头和响应内容,这样我们才能完整正确的发送请求。这个步骤我们可以采用一个小工具HTTPLook来实现,HTTPLook可以实现对请求和响应的监视。HTTPLook在网上可以随意下载,我下载的地址是http://www.crsky.com/soft/3786.html,下载完成后双击安装,一路NEXT即可,软件的主界面如下。

      

  在操作之前,点解上图中的绿色箭头即可。

2.2 获取网页内容

我们可以采用java.net包中的HttpURLConnection类和URL类来产生和发送请求,并且获取网页。只要流程包括

1)设置采用POST方式时候,发送的请求内容

2)设置请求地址

3)打开链接

4)获取COOKIE,这一步可以有也可以没有,如果在HTTPLook截获的请求信息中包含COOKIE时,这是需要次步。

5)设置请求头中的信息

6)发送请求

7)获取响应的HTML页面

8)关闭连接

 

具体的步骤如下列出:

首先需要定义两个全局变量,如下:

HttpURLConnection httpConn = null;

URL url =  null;

这里列出了用到方法,用来调用和重用。代码如下:

 

 

/**

        * 主方法,执行页面下载和解析的业务逻辑过程

 

        * @param idCard

        *            身份证号码

        * @param passwordStr

        *            个人密码

        *

        * @return 字符串

        */

       public String downLoadPages(String idCard,String passwordStr){

              String result = "";

              try{

                     String s = ""; //采用POSTT方式时候,发送的请求内容,根据需求设定

                     String urlStr = ""; //请求地址,,根据需求设定

 

                     openHttpURLConnection(urlStr,"GET"); //打开链接

                     String head = getHeadValue("Set-Cookie");//获取COOKIE

                     String temp1 = getHtmlStr("GBK"); //获取响应的HTML页面

                     close(); //关闭连接

 

                     //再一次访问

                     urlStr = "http://www.njgjj.com/logonbyidcard.do;"+head;   //请求地址

                     openHttpURLConnection(urlStr,"POST"); //打开链接

                     setHeadValue("Cookie",head); //设置请求头中的COOKIE信息

                     setHeadValue("Content-Length",String.valueOf( s.length())); //设置请求发送内容的长度

                     setHeadValue("Content-type","application/x-www-form-urlencoded");

                     sendRequest(s); //发送请求

                     String result = getHtmlStr( "GBK");//获取响应的HTML页面

                     close();//关闭连接

 

                     System.out.println(result);

                     System.out.println("------------------------------------------------------");

                    

                     /** 解析页面 */

result = parseHtml(result.trim().replaceAll("TH","td"));

              }catch(Exception e){

                     e.printStackTrace();

              } finally {

                     try {

                            if (httpConn != null){

                                   httpConn.disconnect();

                                   httpConn = null;

                            }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

              }

             

              return result;

       }

 

   注意:主方法列出了业务逻辑

 

/**

       * 关闭连接

       */

       public void close(){

              try{

                     if (httpConn != null){

                            httpConn.disconnect();

                            httpConn=null;

                     }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

       }

      

       /**

       * 获取响应包头信息的参数

       */

       public String getHeadValue(String key){

                     String returnValue = "";

                     try{

                            int code = httpConn.getResponseCode();

                            if (code != HttpURLConnection.HTTP_OK) {

                                   System.out.println("error   code   " + String.valueOf(code));

                                   returnValue = String.valueOf(code);

                            }else{

                                   //Map map = httpConn.getHeaderFields();

                                   //Set set = map.keySet();

                                   //Iterator it = set.iterator();

                                   //while(it.hasNext()){

                                   //     System.out.println("next ---"+it.next());

                                   //}

                                   returnValue = httpConn.getHeaderField(key);

                            }

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

                     return returnValue;

                    

              }

 

 

       /**

       * 在请求头中添加参数

       */

       public void setHeadValue(String key,String value){

              try {

                     httpConn.setRequestProperty(key, value);

              } catch (Exception e) {

                     e.printStackTrace();

                     try {

                     if (httpConn != null){

                            httpConn.disconnect();

                            httpConn=null;

                     }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

              }

       }

 

       /**

       * 发送请求

       */

       public void sendRequest(String sendStr){

              OutputStream outputstream = null;

              try {

                     outputstream = httpConn.getOutputStream();

                     outputstream.write(sendStr.getBytes());

                     outputstream.flush();

              } catch (Exception e) {

                     e.printStackTrace();

                     try {

                            if (outputstream != null){

                                   outputstream.close();

                                   outputstream=null;

                            }

                            if (httpConn != null){

                                   httpConn.disconnect();

                                   httpConn=null;

                            }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

              }

       }

      

       /**

       * 打开连接,设置默认请求参数

       */

       public void openHttpURLConnection(String inUrlStr,String method) {

              String urlStr = inUrlStr;

              int chByte = 0;

              String returnStr = ""; //返回值

              try {

                  url = new URL(urlStr);

                     httpConn = (HttpURLConnection) url.openConnection();

                     HttpURLConnection.setFollowRedirects(true);

                     httpConn.setUseCaches(false);

                     httpConn.setDoOutput(true);

                     httpConn.setDoInput(true);

                     httpConn.setRequestMethod(method);

                     httpConn.setRequestProperty("User-Agent",

                                                 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");

                     httpConn

                                   .setRequestProperty(

                                                 "Accept",

                                                 "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");

                    

                     httpConn.setRequestProperty("Connection", "Keep-Alive");

 

              } catch (Exception e) {

                     e.printStackTrace();

                     try {

                     if (httpConn != null){

                            httpConn.disconnect();

                            httpConn=null;

                     }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

              }

       }

      

      

                    

              /**

              * 从响应包体中获取HTML页面内容

              */

              public String getHtmlStr(String encode){

                     InputStream in = null;

                     String returnHtmlStr = "";

                     try{

                     int code = httpConn.getResponseCode();

                     if (code != HttpURLConnection.HTTP_OK) {

                            System.out.println("error   code   " + String.valueOf(code));

                            returnHtmlStr = String.valueOf(code);

                     }else{

                            in = httpConn.getInputStream();

 

                            String webpage;

                            StringBuffer bf = new StringBuffer();

                            int c;

                            while (((c = in.read()) != -1)) {

                                   int all = in.available();

                                   byte[] b = new byte[all];

                                   in.read(b);

                                   webpage = new String(b, encode);

                                   //webpage = new String(b);

                                   bf.append(webpage);

                            }

 

                            String outStr = new String(bf.toString());

                            returnHtmlStr =  outStr;                   

                           

                     }

              } catch (Exception e) {

                     e.printStackTrace();

                     try {

                            if (in != null)

                                   in.close();

                            if (httpConn != null){

                                   httpConn.disconnect();

                                   httpConn=null;

                            }

                     } catch (Exception ex) {

                            ex.printStackTrace();

                     }

              }

              return returnHtmlStr;

       }

 

2.3 解析页面

当页面获取成功后,下一步需要做的就是解析页面了。此时就用到了HTMLPARSER包。HTMLPARSER包的下载地址请参考前言部分。

我们假设需要获取HTML页面中的一个span和一个table的内容,所以只要简单的列出了解析SPANTABLE的内容的方式,以做抛砖引玉的作用,具体请参考HTMLPARSER的帮助文档,帮助文档的软件包的下载地址处可以同时下载获得。

具体代码如下:

/**

        * 在指定表中查找指定行、指定列的值<

分享到:
评论

相关推荐

    C#正则+HTMLParser进行网页信息提取的实例。

    在IT领域,尤其是在Web开发中,提取网页信息是一项常见的任务。C#作为.NET框架下的主要编程语言,提供了强大的工具和库来实现这一功能。在这个实例中,我们将探讨如何结合C#中的正则表达式(Regular Expressions)和...

    HtmlParser提取网页信息的设计与实现

    本文将详细介绍如何利用HtmlParser这一开源工具来提取网页中的关键信息,并通过数据清洗将其存储到SQL数据库中,以便后续的数据分析和应用。 #### 二、HtmlParser概述 HtmlParser是一种轻量级、高效且易于使用的...

    基于HttpClient与HTMLParser 的网页正文提取

    本文主要介绍了如何利用HttpClient与HTMLParser这两种技术来实现网页正文的提取。文章首先阐述了互联网信息飞速增长的背景下,网页数据提取的重要性,以及自动化的网页抓取与分析对于科研、工程和商业活动的意义。...

    java利用htmlparser抓取网页数据

    总之,Java利用HTMLParser库可以有效地抓取和解析网页数据,为数据分析、信息监控等任务提供便利。通过不断学习和实践,你可以掌握更多高级技巧,实现更复杂的功能。记得在使用过程中遵守互联网道德,尊重网站的...

    htmlparser进行网页信息的抽取

    在网页抓取和信息采集领域,HTMLParser 提供了高效的处理机制,能够帮助开发者有效地解析复杂的HTML结构,提取所需的数据。以下是对HTMLParser及其在网页信息抽取中应用的详细说明: 1. **HTMLParser基本概念**: ...

    HTMLParser提取网页超链接研究

    ### HTMLParser提取网页超链接研究 #### 一、引言 随着互联网技术的快速发展和普及,全球信息资源呈爆炸式增长。在这个过程中,各种互联网搜索引擎(例如百度、谷歌等)应运而生,它们极大地便利了人们获取所需...

    HTMLParser提取网页内容

    总结来说,HTMLParser 提供了一个高效且结构化的接口来解析HTML文档,结合正则表达式的清理,我们可以有效地提取网页的正文和标题。在进行这样的操作时,需要注意正确处理各种HTML标签和结构,以确保提取到的信息...

    htmlparser抓取网页内容

    总结来说,"htmlparser抓取网页内容"项目展示了如何利用Python的HTMLParser库从特定网站抓取专利状态信息,涵盖了网络请求、HTML解析、数据提取等多个IT技术点。在实践中,开发者需要具备HTML和HTTP的基础知识,以及...

    Htmlparser 网页内容抓取java

    这在进行网络爬虫开发时非常有用,可以提取出网页中的所有链接,进行进一步的分析或者访问。 HTMLParser库还支持事件驱动的解析模式,这意味着开发者可以注册监听器来处理解析过程中遇到的各种事件,比如开始解析一...

    基于htmlparser的网页爬虫和java调用excel代码

    它可以识别HTML标签、属性、文本等元素,使得开发者能够方便地提取网页中的结构化信息。 2. **网页爬虫的基本原理**:网页爬虫通过发送HTTP请求到目标网站,获取HTML响应,然后解析这些HTML内容来提取所需信息。在...

    htmlparser实现网页上抓取数据

    HTMLParser是Python中用于解析HTML文档的一个库,它允许开发者高效地从网页中提取所需的数据。在Web开发和数据挖掘领域,爬虫技术是获取大量网络数据的重要手段,而HTMLParser则是实现这一目标的关键工具之一。本文...

    htmlparser网页分析

    比如,你可以使用它来提取网页上的特定数据,如价格、评论、链接等;也可以用于验证网页的结构是否符合预期,或者在不影响页面展示的情况下替换或添加HTML元素。 6. 扩展性:HTMLParser提供了丰富的API,允许开发者...

    Winista.Htmlparser.Net 源码 +Demo

    2. **WebParser**:可能是一个简单的网页抓取器,利用HtmlParser解析网页,提取所需信息,例如新闻标题、链接等。 开发者可以打开`AnalyzeHtml.sln`,编译并运行这两个项目,以了解HtmlParser的具体使用方法和实际...

    HTMLParser抽取Web网页正文信息.doc

    ### HTMLParser抽取Web网页正文信息的关键知识点 ...通过上述步骤,HTMLParser不仅能够高效地从网页中提取正文信息,还能通过一系列智能算法确保提取的内容与主题高度相关,极大地提高了信息处理的效率和质量。

    htmlparser库与教程

    "htmlparser实现从网页上抓取数据.doc"文件则很可能是一个详细的教程,指导用户如何利用HTMLParser库进行网页数据抓取。在这个教程中,可能会涵盖以下关键知识点: 1. **安装和引入HTMLParser**:首先,用户需要将...

    HtmlParser 网页分解dll

    HtmlParser是一个用于网页抓取和解析的库,它能够帮助开发者高效地提取HTML文档中的信息并将其转换为结构化的XML格式。在Web开发中,这样的工具对于数据挖掘、搜索引擎优化(SEO)、网络爬虫和自动化信息处理至关...

    基于HTMLParser的Web信息抽取系统的设计与实现

    信息抽取模块是系统的核心,它利用HTMLParser解析网页,并结合正则表达式进行模式匹配,以提取特定类型的信息。在本案例中,重点在于电子邮件地址的抽取。通过分析网页源代码,模块能够识别出符合电子邮件格式的字符...

Global site tag (gtag.js) - Google Analytics