`

Neko的简单使用

    博客分类:
  • HTML
阅读更多

做了一段时间的网页解析的工作,有了些体会,写出来和大家分享。
     现在流行的HTML解析工具主要有HTML Parser和nekohtml,我就不细介绍他们了,有兴趣的话可以自己google。个人比较喜欢用nekohtml+xerces,xerces实际上也是一个XML的解析包,nekohtml建筑在其之上,两者搭配后可将网页解析成一颗DOM树,这样我们对于网页的操作就转化为对这棵树的操作了,而这正是它和HTML Parser的不同之处,也是我喜欢它的原因。
     我们对网页的操作主要通过org.w3c.dom中提供的接口(nekohtml+xerces提供这些接口的实现),熟悉XML解析的朋友对这个包一定不会陌生。这个包中用的比较多的接口有:Node、Document、Element、Text等。Node是DOM树中所有节点根接口,它的子接口有Document、ProcessingInstruction、Element、Comment、Text等,具体的继承层次请参考java doc。正如这些接口的名字说显示的,它们对应于DOM树中相应的元素,这里我就不细说了,下面我们通过一个例子来说明它们的使用方法。
     从网页中抽取文本是一项很平常的工作,HTML Parser中提供了一个TextExtractingVisitor来实现这一点,但nekohtml没有现成这样的类,我们自己写一个也不难:

import java.io.BufferedReader;
import java.io.FileReader;

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;


public class Demo {
public static String TextExtractor(Node root){
   //若是文本节点的话,直接返回
   if (root.getNodeType() == Node.TEXT_NODE) {
    return root.getNodeValue().trim();
   }
   if(root.getNodeType() == Node.ELEMENT_NODE) {
    Element elmt = (Element) root;
    //抛弃脚本
    if (elmt.getTagName().equals("STYLE")
      || elmt.getTagName().equals("SCRIPT"))
     return "";
  
    NodeList children = elmt.getChildNodes();
    StringBuilder text = new StringBuilder();
    for (int i = 0; i < children.getLength(); i++) {
     text.append(TextExtractor(children.item(i)));
    }
    return text.toString();
   }
   //对其它类型的节点,返回空值
   return "";
}
public static void main(String[] args) throws Exception{
   //生成html parser
   DOMParser parser = new DOMParser();
   //设置网页的默认编码
   parser.setProperty(
     "http://cyberneko.org/html/properties/default-encoding",
     "gb18030");
   //input file
   BufferedReader in = new BufferedReader(new FileReader("input.htm"));
   parser.parse(new InputSource(in));
   Document doc = parser.getDocument();
   //获得body节点,以此为根,计算其文本内容
   Node body = doc.getElementsByTagName("BODY").item(0);
   System.out.println(TextExtractor(body));
}
}

     除了提供DOM接口外,nekohtml还有一些其他功能,如格式化网页文本、确保网页格式良好(well-formed)等,具体可参见nekohtml的文档。
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhou2002/archive/2008/01/19/2053911.aspx

分享到:
评论

相关推荐

    neko8:受pico8,tic80和liko12启发的幻想控制台,用C ++编写

    与pico8等平台使用自定义脚本语言不同,neko8选择使用C++作为开发语言,这为开发者提供了更丰富的功能和更高的性能。C++是一门通用且强大的系统级编程语言,拥有广泛的应用领域,包括游戏开发。 3. **pico8、tic80...

    neko:一只小猫在 macOS 上跟随你的鼠标

    总体来说,"neko"项目展示了如何用Swift构建一个简单的、有趣且具有互动性的macOS应用。对于学习Swift或者对macOS应用开发感兴趣的用户,这是一个很好的实践案例,可以从中了解应用程序的结构、用户界面设计以及与...

    Neko-Img-Generator:简易的NEKO IMAGE生成器

    Neko-Img发电机简易的NEKO IMAGE生成器安装您需要使用npm install进行安装。 您需要使用Electron( npm install electron )来打开此应用程序( electron . )。 并享受这个程序!演示版

    neko-test:SNES示例项目展示了Neko库的用法

    该存储库包含用于简单测试ROM的文件,该文件演示了如何使用。 检查链接以获取有关库例程的更多详细信息。 构建测试ROM 有一个makefile应该照顾它。 简单克隆代码并使用make进行构建: $ git clone --recursive ...

    RRZE-NEKO:带有著名Neko猫的WordPress插件

    3. **互动设计**:可能允许用户与Neko猫进行简单的互动,如点击、喂食等,提升用户体验。 4. **个性化设置**:提供多种Neko猫的样式和颜色供用户选择,满足个性化需求。 5. **兼容性**:确保插件与大多数常见的...

    Neko:一个为隐私而设计的简单聊天应用程序

    猫子 一个为保护隐私而设计的简单聊天应用程序。 项目设置 npm install 编译和热重装以进行开发 npm run serve 编译并最小化生产 npm run build 整理和修复文件 npm run lint 自定义配置 请参阅。

    Neko:图片加载框架

    7. **图片加载接口**:Neko提供了一套简单易用的API,开发者可以通过几行代码就能实现图片的加载、显示、替换等操作,例如`load(url).into(imageView)`。 8. **自定义扩展**:Neko的灵活性体现在可以扩展其功能,...

    neko-rooms:n.eko的房间管理

    简单房间管理系统。 如何开始 您需要安装Docker和docker-compose 。 步骤1 将.env.example复制到.env并进行自定义。 cp .env.example .env 第2步 运行启动docker compose堆栈。 docker-compose up -d 停止3 使用...

    Neko 系统工具箱1.0.sh

    自写的简单脚本,实验所用 脚本一键执行 系统分析工具的工具箱 查看IP地址、显示用户信息、显示系统平均负载、显示系统时间并且自动对时、换源、永久关闭防火墙及临时关闭selinux等等十多个功能

    豆瓣neko猫-crx插件

    它在浏览器的一个角落里展示一只可爱的neko猫形象,用户可以通过点击与这只猫进行简单的交互,比如抚摸、喂食等,这些互动设计使得工作或学习之余能够得到轻松的娱乐体验。此外,neko猫还具备智能提醒功能,每10分钟...

    Neko_系统工具箱2.0.sh

    自写的简单脚本,实验所用 之前的升级版

    Neko-Warrior:龙战士+猫

    接下来,"使用单选按钮添加Neko艺术以更改精灵"这部分功能展示了游戏的个性化设计。在游戏中,玩家可以选择不同风格的Neko艺术,这可能是通过单选按钮来实现的。单选按钮是一种用户界面元素,允许用户在一组选项中...

    eneko.me:我的个人网站

    标题 "eneko.me:我的个人网站" 暗示了这是一个个人网站项目,可能是由一个开发者或设计师创建的,用于展示他们的作品、技能或者个人经历。这个网站的源代码很可能包含在名为 "eneko.me-master" 的压缩包中,通常在...

    neko:用于 STLC、System F 和 System F-ω 的可爱类型微积分语言! (停顿)

    Neko 使用 s-expression 作为其语法。 Neko 源代码可以写在引用的球拍列表中。 类型 Type ::= '* | Type '-&gt; Type ('-&gt; Type)* | '( Type ') 注意:函数类型是右结合的, t1 -&gt; t2 -&gt; t3等价于t1 -&gt; (t2 -&gt; t3) ...

    NekoScreenSaver:真正的Neko Atsume屏幕保护程序

    用户只需简单地双击名为"NekoScreenSaverOSX.saver"的屏幕保护程序文件,即可完成在Mac OS X系统上的安装,让可爱的猫咪们在屏幕暂时闲置时活跃起来。 在技术层面上,NekoScreenSaver的开发语言是Swift,这是苹果...

    nekos.life-discord-bot::Japanese_dolls: 使用 Nekos.life 包装器和 discord.js 的非常简单的 Nekos.life 机器人

    简单的 nsfw discord bot 使用 Nekos.life 包装器和 discord.js 的非常简单的 nsfw discord bot安装 You have to install NodeJS and Git.Create a folder.Open Command Promt.Type in: cd The path to your new ...

    pet_cursor.js:宠物光标(Neko光标)是一个简单JavaScript文件,可将您网站的光标变成可爱的动画宠物! (对于台式机)

    pet_cursor.js 宠物光标(Neko光标)是一个简单JavaScript文件,可将您网站的光标变成可爱的动画宠物! (对于台式机) 现在,您的桌面访问者可以在浏览您的网站时扮演可爱的角色! 默认角色基于,您可以使用此默认...

    nekos.life-discord-bot:using使用Nekos.life包装器和discord.js的非常简单的Nekos.life机器人

    使用Nekos.life包装器和discord.js的非常简单的nsfw discord机器人 安装 You have to install NodeJS and Git. Create a folder. Open Command Promt. Type in: cd The path to your new folder. (Example: C:\Users...

    neko-box::grinning_cat:具有您最新的AniList活动的可固定动态Gist

    Neko-Box是一个简单的GitHub Action,旨在使动态Gist显示来自AniList的最新活动。 :party_popper: 用法首先,您需要准备一些事情: 在创建一个新的公共GitHub Gist 与创建一个访问令牌gist范围和保存。 您可以在...

    easyVM v0.2

    easyVM是一个简单的虚拟机。 0.1版本只支持8086指令集和一些简单的I/O设备,只支持英文文本显示方式。 0.2版本主要是在0.1版基础上加了一小部分32位指令(push eax等),使得easyVM可以运行MS-DOS 6.22自带的...

Global site tag (gtag.js) - Google Analytics