`
tw5566
  • 浏览: 463233 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

htmlparser(2)

    博客分类:
  • java
F# 
阅读更多
上接 1

else if (node instanceof TextNode) {

              stringText = node.toPlainTextString();

              if ( "" .equals( title ))

                  continue ;

              stringText = stringText.replaceAll( "[ \t\n\f\r   ]+" , " " );

              stringText = TextHtml.html2text (stringText.trim());

 

              if (! "" .equals(stringText)) {

                  body .append(stringText);

                  body .append( " " );

              }

           } else if (node instanceof TagNode) {

              TagNode tagNode = (TagNode) node;

              String name = ((TagNode) node).getTagName();

              if (name.equals( "TITLE" ) && !tagNode.isEndTag()) {

                  node = lexer.nextNode();

                  stringText = node.toPlainTextString().trim();

                  if (! "" .equals(stringText)) {

                     title = stringText;

                  }

              } else if (name.equals( "META" )) {

                  String contentCharSet = tagNode.getAttribute( "CONTENT" );

                  // System.out.println("contentCharset="+contentCharSet);

                  int b = contentCharSet.toLowerCase().indexOf( "charset" );

                  if (b > -1) {

                     String newCharSet = getCharset (contentCharSet);

                     // System.out.println("newCharSet=" + newCharSet);

                     if (!charSet.equals(newCharSet)) {

                         tryAgain = true ;

                         charSet = newCharSet;

                         // System.out.println("charSet=" + charSet);

                         // System.out.println("newCharSet=" + newCharSet);

                         break ;

                     }

                  }

              }

           }

       }

 

       /**   如果在 Meta 信息中检测到新的字符编码,则需要按照 meta 信息中的编码再次解析网页。   **/

       if (tryAgain) {

           body = new StringBuffer();

 

           try {

                uc = (HttpURLConnection) uc.getURL().openConnection();

              lexer = new Lexer( new Page(uc.getInputStream(), charSet));

           } catch (Exception e) {

              e.printStackTrace();

           }

 

           lexer.setNodeFactory( new PrototypicalNodeFactory());

 

           while ( null != (node = lexer.nextNode())) {

              if (node instanceof TextNode) {

                  stringText = node.toPlainTextString();

                  if ( "" .equals( title ))

                     continue ;

                  stringText = stringText.replaceAll( "[ \t\n\f\r   ]+" , " " );

                  stringText = TextHtml.html2text (stringText.trim());

                  if (! "" .equals(stringText)) {

                     body .append(stringText);

                     body .append( " " );

                  }

              }

           }

       }

    }

   

    /**

      * 找出最终的网页编码

      * @param name 经过 getCharset 方法处理后 meta 标签的值

      * @param _default 默认的编码集

      * @return

      */

    public static String findCharset(String name, String _default) {

       String ret;

 

       try {

           Class<java.nio.charset.Charset> cls;

           Method method;

           Object object;

 

           cls = java.nio.charset.Charset. class ;

           method = cls.getMethod( "forName" , new Class[] { String. class });

           object = method.invoke( null , new Object[] { name });

           method = cls.getMethod( "name" , new Class[] {});

           object = method.invoke(object, new Object[] {});

           ret = (String) object;

       } catch (NoSuchMethodException nsme) {

           ret = name;

       } catch (IllegalAccessException ia) {

           ret = name;

       } catch (InvocationTargetException ita) {

           ret = _default;

           System. out

                  .println( "unable to determine cannonical charset name for "

                         + name + " - using " + _default);

       }

 

       return (ret);

    }

 

   未完,接3
分享到:
评论

相关推荐

    前端开源库-parse5-htmlparser2-tree-adapter

    在`parse5-master`这个压缩包中,很可能包含了parse5库的源码和相关资源,你可以通过阅读源码、查看示例和文档来更深入地理解这个库的工作原理,以及如何有效地使用`parse5-htmlparser2-tree-adapter`。同时,熟悉这...

    domhandler, htmlparser2作为独立模块的dom.zip

    domhandler, htmlparser2作为独立模块的dom domhandler DOM处理程序( 正式称为 DefaultHandler ) 创建一个包含页面所有节点的树。 树可以使用 DOMUtils 库操作。用法var handler = new DomHandler([ &l

    htmlparser2:原谅HTML和XML解析器

    htmlparser2 快速而宽容HTML / XML解析器。 安装 npm install htmlparser2 提供htmlparser2的实时演示。 生态系统 名称 描述 快速且宽容HTML / XML解析器 htmlparser2的处理程序,可将文档转换为DOM 使用...

    domhandler:htmlparser2的处理程序,用于获取DOM

    domhandler ...const { Parser } = require ( "htmlparser2" ) ; const { DomHandler } = require ( "domhandler" ) ; const rawHtml = "Xyz [removed]var foo = '&lt;&lt;bar&gt;&gt;';&lt; / script&gt;&lt;!--&lt;!-

    domutils:使用htmlparser2的DOM的实用程序

    生态系统姓名描述 快速而宽容HTML / XML解析器 htmlparser2的处理程序,可将文档转换为DOM 使用domhandler的DOM的实用程序CSS选择器引擎,与domhandler的DOM兼容domhandler DOM的jQuery API domhandler DOM的序列化...

    domelementtype:htmlparser2 dom中所有类型的节点

    本篇文章将深入探讨HTMLParser2中的DOM节点类型,并结合TypeScript的相关特性进行详细说明。 DOM(Document Object Model)是W3C组织定义的一种标准,用于表示HTML或XML文档的树形结构。在HTMLParser2中,DOM节点...

    htmlparser2.0

    HTMLParser2与Apache HttpClient.jar结合使用时,可以构成一个高效的网页抓取和分析解决方案。 在网页分析领域,HTMLParser2.0提供了以下几个核心功能: 1. **解析器接口**:HTMLParser2.0提供了一个简洁的API,...

    htmlParser2.0.jar

    2. **自定义标签处理**:一个独特的特性是它支持处理自定义的HTML标签,这对于解析包含非标准标签或者XHTML文档特别有用。 3. **事件驱动模型**:解析器采用事件驱动模型,当遇到HTML元素、属性或其他结构时,会...

    HTMLParser 2.0最新jar API 源代码

    2. **HTMLParser-2.0-SNAPSHOT-src.zip**:这是源代码文件,提供了HTMLParser库的源码。通过查看源代码,开发者可以深入理解库的工作原理,学习如何实现类似功能,甚至可以根据需求对其进行修改或扩展。源代码对于...

    htmlparser2.0的学习文档

    说明了htmlparser2.0的相关事项,同时也给出了htmlparser2.0的api

    htmlparser(HTML页面解析)例子

    首先,我们需要导入Python的`HTMLParser`模块。在Python 3中,这个模块已经被重命名为`html.parser`,因此应该导入`html.parser`,而不是`HTMLParser`。以下是如何导入的示例: ```python from ...

    HtmlParser 2.1 API

    HtmlParser 2.1 API,由java编程,用于解析网页内容。

    htmlparser解析Html的jar包和源文件包(两个)

    2. `htmlparser-1.6-all-src.zip` 是源代码包,包含了HTMLParser的完整源代码。这对于开发者来说非常重要,因为它允许我们查看和理解库内部的工作原理,便于自定义、调试或扩展库的功能。开发者可以直接解压这个zip...

    walkers:使用 htmlparser2 递归 DOM 遍历

    使用 htmlparser2 进行递归 DOM 遍历。 入门 安装模块: npm install walkers var walkers = require ( '../lib/walkers.js' ) ; var request = require ( 'request' ) ; var htmlparser = require ( "htmlparser2...

    HtmlParser的使用

    2. 遍历HTML节点: HTMLParser将HTML文档解析为一系列的Node对象。你可以遍历这些节点,访问它们的类型、标签名、文本内容等。例如: ```java for (Node node : parser.getNodes()) { if (node instanceof TagNode)...

    htmlparser

    META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....

    前端开源库-htmlparser-to-html

    请注意,你需要根据实际使用的解析库(htmlparser或htmlparser2)调整代码,因为它们生成的JSON格式可能略有不同。 ### 总结 `htmlparser-to-html`是一个实用的前端工具,它简化了HTML字符串与JSON数据之间的转换...

    htmlparser.jar文件

    在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...

    c#版htmlparser htmlparser.dll htmlparser源代码

    `htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...

    HTMLParser.net源代码HTMLParser.net使用demo

    2. **错误处理**:HTMLParser.net可以处理不完美的HTML,允许在遇到语法错误时继续解析,而不是抛出异常。这对于处理来自互联网的非标准或不完整HTML非常有用。 3. **CSS选择器支持**:库提供了类似jQuery的API,使...

Global site tag (gtag.js) - Google Analytics