- 浏览: 2963591 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (2529)
- finance (1459)
- technology (218)
- life (343)
- play (150)
- technology-component (0)
- idea (6)
- house (74)
- health (75)
- work (32)
- joke (23)
- blog (1)
- amazing (13)
- important (22)
- study (13)
- Alternative (0)
- funny (8)
- stock_technology (12)
- business (16)
- car (21)
- decorate (4)
- basketball (2)
- English (16)
- banker (1)
- TheBest (1)
- sample (2)
- love (13)
- management (4)
最新评论
-
zhongmin2012:
BSM确实需要实践,标准ITIL服务流程支持,要做好,需要花费 ...
BSM实施之前做什么 -
shw340518:
提示楼主,有时间逻辑bug:是你妈二十那年写的 那会儿连你爹都 ...
80后辣妈给未来儿子的信~我的儿,你也给我记住了~~~ -
guoapeng:
有相关的文档吗?
it项目管理表格(包含146个DOC文档模板) -
solomon:
看到的都是 这种 CTRL+C 和 CTRL+V 的文章, ...
Designing a website with InfoGlue components -
wendal:
恩, 不错. 有参考价值
Designing a website with InfoGlue components
HtmlParser的使用
在对抓取来的页面进行分析时,我们可以使用htmlParser工具:
以下將dmeo簡單的程式範例
Demo1
public static void main(String[] args) throws Exception
{
//不完整格式的HTML訊息
String html = "我們是害蟲<table>1234567890<table>lk你好中國";
Parser parser = Parser.createParser(new String(html.getBytes(),"8859_1"));
Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
for (int i = 0; i < tables.length; i++) {
TableTag tableTag = (TableTag)tables[i];
//列印出結束標籤所在的未知
System.out.println("END POS:"+tableTag.getEndTag().getEndPosition());
//補齊未結束的標籤並列印
System.out.println(new String(tableTag.toHtml().getBytes("8859_1")));
}
}
Demo2
/**
* 獲取HTML的預覽訊息,其中content是對象的一個屬性,也就是待處理的HTML內容
* @return
*/
public String getPreviewContent(){
//截取前N個字符
String ct = StringUtils.left(content,MAX_COUNT);
//對一些未完成的標籤先補齊,避免出現例如<tab這樣的標籤
if(ct!=null content!=null) {
int idx2 = ct.lastIndexOf('>');
int idx1 = ct.lastIndexOf('<');
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length());
int idx3 = ct2.indexOf('>');
if(idx3!=-1 idx3<(MAX_COUNT2-MAX_COUNT)) {
ct += content.substring(ct.length(),ct.length()+idx3+1);
}
}
}
//對於一些頁面嵌入了ActiveX對象進行預處理
if(ct!=null content!=null) {
int idx2 = ct.toLowerCase().lastIndexOf("</object>");
int idx1 = ct.toLowerCase().lastIndexOf("<object");
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length()).toLowerCase();
int idx3 = ct2.indexOf("</object>");
if(idx3!=-1)
ct += content.substring(ct.length(),ct.length()+idx3+9);
else
ct = ct.substring(0,idx1);
}
}
if(ct!=null content!=null) {
Parser parser = Parser.createParser(new String(ct.getBytes(),ISO8859_1));
//中文訊息必須轉碼後方可傳入
Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
if(tables!=null tables.lengtd>0) {
TableTag tableTag = (TableTag)tables[0];
ct = ct.substring(0,tableTag.getStartPosition())
+ new String(tableTag.toHtml().getBytes(ISO8859_1));
//處理後的數據轉回GBK的編碼
}
}
return ct;
}
運用HTMLParser API 提供三種方式之HTML Tag的擷取
* 方法一
// 使用 ObjectFindingVisitor 配合不同的 Tag.class 分析網頁
try {
ImageTag imgLink;
ObjectFindingVisitor visitor = new ObjectFindingVisitorImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
parser.visitAllNodesWith(visitor);
Node[] nodes = visitor.getTags();
for (int i = 0; i < nodes.length; i++) {
// ImageTag
imgLink = (ImageTag) nodes[i];
// "http://www.msn.com.tw/webinclude/zh-tw/images/msn.gif" => ImageURL
System.out.println("ImageURL = " + imgLink.getImageURL());
// "/webinclude/zh-tw/images/msn.gif" => ImageLocation
System.out.println("ImageLocation = " + imgLink.extractImageLocn());
// SRC value
System.out.println("SRC = " + imgLink.getAttribute("SRC"));
}
} catch (Exception e) {
e.printStackTrace();
}
* 方法二
// 使用不同的 NodeFilter 分析網頁
try {
NodeFilter filter = new TagNameFilter("IMG");
NodeFilter filter1 = new NodeClassFilter(ImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.elementAt(i).toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
* 方法三
// 直接使用 Tag.class 分析網頁
try {
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
Node[] nodes = parser.extractAllNodesThatAre(ImageTag.class);
for (int i = 0; i < nodes.length; i++) {
ImageTag imageTag = (ImageTag) nodes[i];
System.out.println(imageTag.getImageURL());
}
} catch (Exception e) {
e.printStackTrace();
}
以下將dmeo簡單的程式範例
Demo1
public static void main(String[] args) throws Exception
{
//不完整格式的HTML訊息
String html = "我們是害蟲<table>1234567890<table>lk你好中國";
Parser parser = Parser.createParser(new String(html.getBytes(),"8859_1"));
Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
for (int i = 0; i < tables.length; i++) {
TableTag tableTag = (TableTag)tables[i];
//列印出結束標籤所在的未知
System.out.println("END POS:"+tableTag.getEndTag().getEndPosition());
//補齊未結束的標籤並列印
System.out.println(new String(tableTag.toHtml().getBytes("8859_1")));
}
}
Demo2
/**
* 獲取HTML的預覽訊息,其中content是對象的一個屬性,也就是待處理的HTML內容
* @return
*/
public String getPreviewContent(){
//截取前N個字符
String ct = StringUtils.left(content,MAX_COUNT);
//對一些未完成的標籤先補齊,避免出現例如<tab這樣的標籤
if(ct!=null content!=null) {
int idx2 = ct.lastIndexOf('>');
int idx1 = ct.lastIndexOf('<');
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length());
int idx3 = ct2.indexOf('>');
if(idx3!=-1 idx3<(MAX_COUNT2-MAX_COUNT)) {
ct += content.substring(ct.length(),ct.length()+idx3+1);
}
}
}
//對於一些頁面嵌入了ActiveX對象進行預處理
if(ct!=null content!=null) {
int idx2 = ct.toLowerCase().lastIndexOf("</object>");
int idx1 = ct.toLowerCase().lastIndexOf("<object");
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length()).toLowerCase();
int idx3 = ct2.indexOf("</object>");
if(idx3!=-1)
ct += content.substring(ct.length(),ct.length()+idx3+9);
else
ct = ct.substring(0,idx1);
}
}
if(ct!=null content!=null) {
Parser parser = Parser.createParser(new String(ct.getBytes(),ISO8859_1));
//中文訊息必須轉碼後方可傳入
Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
if(tables!=null tables.lengtd>0) {
TableTag tableTag = (TableTag)tables[0];
ct = ct.substring(0,tableTag.getStartPosition())
+ new String(tableTag.toHtml().getBytes(ISO8859_1));
//處理後的數據轉回GBK的編碼
}
}
return ct;
}
運用HTMLParser API 提供三種方式之HTML Tag的擷取
* 方法一
// 使用 ObjectFindingVisitor 配合不同的 Tag.class 分析網頁
try {
ImageTag imgLink;
ObjectFindingVisitor visitor = new ObjectFindingVisitorImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
parser.visitAllNodesWith(visitor);
Node[] nodes = visitor.getTags();
for (int i = 0; i < nodes.length; i++) {
// ImageTag
imgLink = (ImageTag) nodes[i];
// "http://www.msn.com.tw/webinclude/zh-tw/images/msn.gif" => ImageURL
System.out.println("ImageURL = " + imgLink.getImageURL());
// "/webinclude/zh-tw/images/msn.gif" => ImageLocation
System.out.println("ImageLocation = " + imgLink.extractImageLocn());
// SRC value
System.out.println("SRC = " + imgLink.getAttribute("SRC"));
}
} catch (Exception e) {
e.printStackTrace();
}
* 方法二
// 使用不同的 NodeFilter 分析網頁
try {
NodeFilter filter = new TagNameFilter("IMG");
NodeFilter filter1 = new NodeClassFilter(ImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.elementAt(i).toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}
* 方法三
// 直接使用 Tag.class 分析網頁
try {
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
Node[] nodes = parser.extractAllNodesThatAre(ImageTag.class);
for (int i = 0; i < nodes.length; i++) {
ImageTag imageTag = (ImageTag) nodes[i];
System.out.println(imageTag.getImageURL());
}
} catch (Exception e) {
e.printStackTrace();
}
发表评论
-
New Enterprise Security Solutions
2011-09-13 15:46 0<!-- [if !mso]> <styl ... -
ES Announces Enterprise Security Solutions
2011-09-13 15:40 0<!-- [if !mso]> <styl ... -
linux下如何将文件打包、压缩并分割成制定大小?
2010-09-15 18:52 3318将大文件或目录打包、 ... -
rhel4 yum安装, 使用
2010-09-07 16:37 0第一种方法: yum源来自chinalinuxpub.com ... -
Windows: 远程自动安装程序
2010-08-26 15:48 1107问题的提出 作为 ... -
Oracle体系结构
2010-08-07 09:53 1044Oracle体系结构 Oracle Server包括Oracl ... -
ocp sesson 3
2010-07-31 14:39 0show parameter undo 只有 默认情况下服务 ... -
ocp session 2
2010-07-25 17:00 0/home/oracle/raInventory/orains ... -
ocp session 1
2010-07-24 13:02 0ocp first lesson D:\oracle_cou ... -
Python的xmlrpc调试
2010-07-19 23:55 2132Python的xmlrpc 调 试 ----------- ... -
mdadm使用详解及RAID 5简单分析
2010-07-11 16:19 1399http://blog.csdn.net/chinalinux ... -
Linux的lvm的基本配置步骤
2010-07-11 14:53 12901.增加硬件 增加的ide硬盘前缀为hd,scs ... -
OCP study material
2010-07-11 13:52 0\\192.168.1.105watch -n 1 'stat ... -
apache+python+mod_python+django 编译安装指南
2010-06-24 17:25 14771、本文将知道你在 linux 下使用源码包安装 ... -
在ubuntu下配置apache运行python脚本
2010-06-22 16:11 2281常用的简单命令 sudo apt ... -
Python 2.5 Quick Reference
2010-06-21 11:18 1473... -
shell 面试题汇集
2010-06-10 19:50 1066利用 top 取某个进程的 CPU 的脚本 : ... -
shell程序面试题
2010-06-10 19:48 29321.要求分析Apache访问日志,找出里面数量在前面100位的 ... -
EMC技术支持工程师笔试部分试题回忆
2010-06-07 15:16 1655要查看更多EMC公司笔经相关信息,请访问EMC公司校园招聘CL ... -
linux shell 条件语句
2010-06-03 23:29 1799...
相关推荐
HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm`帮助文档是宝贵的参考资料,包含了详细的API说明和技术细节。记住,理解并熟练...
本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...
HTMLParser使用详解.doc如何利用JAVA实现对html的解析
以下是一个使用HTMLParser的简单示例,展示了如何从文件或URL读取HTML内容并进行解析: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java....
### HTMLParser 使用详解 #### 一、HTMLParser简介与核心模块 HTMLParser 是一款轻量级的HTML解析库,主要用于从HTML文档中提取所需的信息。它具有高效、易用的特点,但官方文档较少,需要使用者根据实践进行探索...
1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...
除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便...
综上所述,网络爬虫开发者在使用HTMLParser进行开发时,需要了解它的基本原理、核心类和构造函数、调试工具的使用、页面编码设置方法、以及一些基本的代码实践。同时,开发者应该具备良好的问题解决和代码调试能力,...
HTMLParser的核心使用场景主要有两个:提取(extraction)和转换(transformation)。提取是指从网页中抽取数据,而转换则是指修改或创建新的HTML内容。1.4版本的HTMLParser在转换领域有了显著的改进,简化了标签的创建...
5. **兼容性与扩展性**:HTMLParser与其他Java库兼容良好,如JDOM、DOM4J等,可以方便地与其他XML处理工具结合使用。此外,它的API设计使得扩展功能相对简单。 6. **错误处理**:HTMLParser具有一定的容错能力,...
4. 使用示例:在"HTMLParser使用详解-Node内容.doc"中,可能详细介绍了如何创建和配置解析器对象,设置解析事件处理器,以及如何通过遍历节点来提取或修改HTML内容。例如,可以使用`TagStart`事件捕获元素开始,`...
使用HTMLParser,开发者可以通过事件驱动的方式解析HTML,监听并响应特定的HTML元素和属性,从而实现对HTML内容的定制化处理。 结合两者,Java正则表达式可以与HTMLParser一起工作,帮助在解析HTML时进行更复杂的...
在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...
4. **分组与反向引用**:使用圆括号`()`可以将一部分表达式分组,方便多次使用或获取子匹配结果。反向引用如`\1`代表第一个分组匹配到的内容。 5. **预查否定**:`^`在方括号`[]`内表示否定,如`[^abc]`匹配非a、b...