- 浏览: 90698 次
- 性别:
- 来自: 深圳
最新评论
-
spdx4046:
我发现用数组和不用数组的差别很大很大哎!
比如: ...
Java NIO ByteBuffer -
comeonbabye:
楼主的确是心情不畅,导致思维缓慢。
类似的经历我也有过。哪天 ...
一次失败的面试 -
yysct2005:
解释:
功能权限:能做什么的问题,如增加销售订单;
数据权 ...
权限系统设计 -
yysct2005:
1、权限模型本质要素分为三个:主体+动作+客体
------ ...
权限系统设计 -
kv0002:
虽然看得不是很懂,但一定要顶
转载 ---【译】构建可扩展的Java EE应用(二)
原文出处------------http://qzone.qq.com/blog/22340638-1212662447
htmlparser使用举例
HTMLParser 一个解析web页面的开源类库, 他有两种主要使用方式, extraction和transformation. 前者就是从网页中萃取出你要的东西,后者就是把web页面中的一些内容改为(转换为)你想要的格式. 下面来看看这两种使用情况的各自特点.
Extraction
萃取例如下面的几种常见的使用方式:
* text extraction, 萃取web页面中的文本文字
* link extraction,萃取web页面中的连接 包括url 和 email地址, 还可以自定义其他标签
* screen scraping, 抓去web页面内容
* resource extraction, 萃取web页面中的资源, 图片 , 声音文件......
* a browser front end, the preliminary stage of page display
* link checking, 确保连接是有效的
* site monitoring, 检查web页面的更改
使用一下几种机制来帮助你实现上面的功能:
filters, visitors and JavaBeans
Transformation
处理web页面的内容, 转换为你需要的.包含:
* URL rewriting, 更改一个web页面的部分连接or 全部连接为你想要的.
* site capture, 把远程的网站抓取到本地
* censorship, 检查web页面内容,移出你不想要的字词
* HTML cleanup, 整理html格式,
* ad removal, 过滤广告连接
* conversion to XML, 转换为xml格式的数据
另外: htmlparser还使用到了几种很好的设计模式.应用的恰到好处, 值得学习和借鉴一下.
这次对htmlparser的简单介绍先介绍到这里, 在以后的时间里 根据具体的应用在写一些例子, 给大家参考一下(htmlparser源代码中也有几个例子,建议看看).
下面通过一个简单的htmlparser的使用举例,来学习htmlparser的使用。代码如下:
package com.amigo.htmlparser;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import org.htmlparser.filters.*;
import org.htmlparser.*;
import org.htmlparser.nodes.*;
import org.htmlparser.tags.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;
/** *//**
* 测试HTMLParser的使用.
* @author <a href="liuqlmailto:liuql-ja@163.com">liuql</a>
* Creation date: 2008-6-5 - 上午11:44:22
*/
public class HTMLParserTest {
/** *//**
* 入口方法.
* @param args
* @throws Exception
*/
public static void main(String args[]) throws Exception {
String path = "http://www.163.com";
URL url = new URL(path);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
InputStream inputStream = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream, "utf8");
StringBuffer sb = new StringBuffer();
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine);
sb.append("\n");
}
String result = sb.toString();
readByHtml(result);
readTextAndLinkAndTitle(result);
}
/** *//**
* 按页面方式处理.解析标准的html页面
* @param content 网页的内容
* @throws Exception
*/
public static void readByHtml(String content) throws Exception {
Parser myParser;
myParser = Parser.createParser(content, "utf8");
HtmlPage visitor = new HtmlPage(myParser);
myParser.visitAllNodesWith(visitor);
String textInPage = visitor.getTitle();
System.out.println(textInPage);
NodeList nodelist;
nodelist = visitor.getBody();
System.out.print(nodelist.asString().trim());
}
/** *//**
* 分别读纯文本和链接.
* @param result 网页的内容
* @throws Exception
*/
public static void readTextAndLinkAndTitle(String result) throws Exception {
Parser parser;
NodeList nodelist;
parser = Parser.createParser(result, "utf8");
NodeFilter textFilter = new NodeClassFilter(TextNode.class);
NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
OrFilter lastFilter = new OrFilter();
lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });
nodelist = parser.parse(lastFilter);
Node[] nodes = nodelist.toNodeArray();
String line = "";
for (int i = 0; i < nodes.length; i++) {
Node node = nodes;
if (node instanceof TextNode) {
TextNode textnode = (TextNode) node;
line = textnode.getText();
} else if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
} else if (node instanceof TitleTag) {
TitleTag titlenode = (TitleTag) node;
line = titlenode.getTitle();
}
if (isTrimEmpty(line))
continue;
System.out.println(line);
}
}
/** *//**
* 去掉左右空格后字符串是否为空
*/
public static boolean isTrimEmpty(String astr) {
if ((null == astr) || (astr.length() == 0)) {
return true;
}
if (isBlank(astr.trim())) {
return true;
}
return false;
}
/** *//**
* 字符串是否为空:null或者长度为0.
*/
public static boolean isBlank(String astr) {
if ((null == astr) || (astr.length() == 0)) {
return true;
} else {
return false;
}
}
}
发表评论
-
Java NIO编程关注点
2011-12-02 18:01 1195阅读yanf4j源码对于read事件、write事件的笔记 ... -
Java NIO ByteBuffer
2011-12-02 17:39 1233在 NIO 库中,所有 ... -
MINA ByteBuffer熟悉
2011-12-02 15:43 1572前不久,一个客户使用MINA架构服务器,在与客户端通信时, ... -
网络编程TCP通信的粘包问题讨论
2011-11-16 18:43 3419第一个需要讨论的大 ... -
memcached
2010-12-02 17:47 848做过的项目中Hibernate都 ... -
Java 正则表达式全攻略(八)
2010-11-18 14:49 898Java 正则表达式全攻略(八) ... -
Java 正则表达式全攻略(七)
2010-11-18 14:48 714Java 正则表达式全攻略(七) ... -
Java 正则表达式全攻略(七)
2010-11-18 14:45 801Java 正则表达式全攻略(七) ... -
Java 正则表达式全攻略(六)
2010-11-18 14:44 881Java 正则表达式全攻略( ... -
Java 正则表达式全攻略(五)
2010-11-18 14:43 1315Java 正则表达式全攻略(五) ... -
Java 正则表达式全攻略(四)
2010-11-18 14:42 1474Java 正则表达式全攻略(四) ... -
Java 正则表达式全攻略(三)
2010-11-18 14:40 1272Java 正则表达式全攻略(三) ... -
Java 正则表达式全攻略(二)
2010-11-18 14:39 1218Java 正则表达式全攻略(二) ... -
Java 正则表达式全攻略(一)
2010-11-18 14:37 1448Java 正则表达式全攻略(一) [ 2010-04 ... -
Hibernate获取数据方式与缓存使用
2010-06-30 14:28 583Hibernate获取数据的方式有不同的几种,其与缓存结合 ... -
log4j配置祥解
2010-01-28 16:41 682log4j配置祥解 第一步:加入log4j-1.2.8 ... -
如何配置和使用Tomcat访问日志
2010-01-28 14:48 966配置位置在log下的server.xml,(tomcat容 ... -
java.util.ResourceBundle使用详解
2009-11-27 14:05 799java.util.ResourceBundle使用详解 ... -
JDBC的陷阱
2009-11-27 14:04 8231、conn一定要在finally语句块进行关闭。2、Stat ... -
Java正则表达式语法
2009-08-06 21:08 1927正则表达式语法 正则 ...
相关推荐
HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...
- `HTMLParser使用举例.doc`: 提供了具体的使用案例,帮助理解如何在实际项目中应用HTMLParser。 在学习和使用HTMLParser时,结合上述资源,可以从理论到实践全面掌握这个强大的工具。无论是为了数据抓取、内容...
本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
在使用Winista.HtmlParser之前,你需要先将其添加到你的C#项目中。如果你有`htmlparser源代码(bin下有所用dll).rar`文件,你可以从中解压出dll文件并将其添加为项目的引用。在Visual Studio中,右键点击项目,选择...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
`HTMLParser使用详解.doc`和`HTMLParser使用举例.doc`可以提供更深入的指导。 5. **HttpClient库**:Apache HttpClient库是Java中用于发送HTTP请求的流行工具。它可以用来模拟登录,通过设置Cookie管理器来跟踪和...
1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...
除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用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的使用,包括其核心类`Parser`以及如何初始化和使用它。 首先,`Parser`是HTMLParser库的核心组件,它负责解析HTML页面。`Parser`类提供了多个构造函数,以适应不同的初始化需求...
综上所述,网络爬虫开发者在使用HTMLParser进行开发时,需要了解它的基本原理、核心类和构造函数、调试工具的使用、页面编码设置方法、以及一些基本的代码实践。同时,开发者应该具备良好的问题解决和代码调试能力,...
HTMLParser的核心使用场景主要有两个:提取(extraction)和转换(transformation)。提取是指从网页中抽取数据,而转换则是指修改或创建新的HTML内容。1.4版本的HTMLParser在转换领域有了显著的改进,简化了标签的创建...
本文将介绍如何使用 HTMLParser 并提供一些基础的使用示例。 首先,`Parser` 类是 HTMLParser 库的核心,负责解析 HTML 页面。它提供了多个构造函数,以适应不同的初始化方式: 1. `public Parser ()`: 创建一个...
在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...
在实际使用HTMLParser时,首先需要在项目中引入这些jar包,然后可以通过创建Parser对象来解析HTML字符串或者文件。例如: ```java import org.htmlparser.Parser; import org.htmlparser.util.ParserException; ...
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...