- 浏览: 7959904 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
htmlparser是个优秀的网页信息抓取工具,下面小结其一些基本的用法:
1 创建parser对象,有两种方式
Parser parser=new Parser(String html)
传入的html
第2种为:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
之后就可以进行访问parser中解析好的内容了
2 解析时,有两类方式,visitor方式和filter过滤方式,vistior方式需要遍历每一个节点,
而filter方式则是过滤。
3 visitor方式的例子;
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建LinkFindingVisitor对象
LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://news.qq.com/");
//查找http://www.qq.com的链接个数
parser.visitAllNodesWith(lvisitor);
System.out.println("网页中包含http://news.qq.com/的链接个数:"+lvisitor.getCount());
}catch(Exception ex){
ex.printStackTrace();
}
/** TextExtractingVisitor类的用法举例 */
public static void testTextExtractingVisitor(String url){
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFindingVisitor对象
TextExtractingVisitor visitor = new TextExtractingVisitor();
//去除网页中的所有标签,提出纯文本内容
parser.visitAllNodesWith(visitor);
System.out.println("网页的纯文本内容为:"+visitor.getExtractedText());
}catch(Exception ex){
ex.printStackTrace();
}
}
4 还可以自定义nodevisitor来扩展nodevisitor,重载其中的各方法:
/** 自定义NodeVisitor子类,并重载抽象类NodeVisitor中的相关方法 */
public class MyNodeVisitor extends NodeVisitor {
/** 重载抽象类NodeVisitor的beginParsing方法,解析开始时调用此方法 */
public void beginParsing(){
System.out.println("开始解析HTML内容......");
}
/** 重载抽象类NodeVisitor的finishedParsing方法,解析结束时调用此方法 */
public void finishedParsing(){
System.out.println("整个HTML内容解析完毕!");
}
/** 重载抽象类NodeVisitor的visitTag方法,遇到开始标签时调用此方法 */
public void visitTag(Tag tag){
System.out.println("开始当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitEndTag方法,遇到结束标签时调用此方法 */
public void visitEndTag(Tag tag){
System.out.println("结束当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitStringNode方法,遇到文本节点时调用此方法 */
public void visitStringNode(Text string){
System.out.println("当前文本节点: "+string);
}
/** 重载抽象类NodeVisitor的visitRemarkNode方法,遇到注释时调用此方法 */
public void visitRemarkNode(Remark remark){
System.out.println("当前注释: "+remark);
}
5 使用filter方式过滤
基本用法:
TagNameFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建TagNameFilter实例
NodeFilter filter = new TagNameFilter ("DIV");
//筛选出所有DIV标签节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
AndFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建HasAttributeFilter实例
NodeFilter filter1 = new HasAttributeFilter("id");
//创建TagNameFilter实例
NodeFilter innerFilter = new TagNameFilter ("DIV");
//创建HasChildFilter实例
NodeFilter filter2 = new HasChildFilter(innerFilter);
//创建AndFilter实例
NodeFilter filter = new AndFilter(filter1, filter2);
//筛选出所有具有id属性且拥有子节点的所有DIV节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
}
StringFilter类用法:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFilter实例
NodeFilter filter = new StringFilter("陈水扁");
//筛选出所有包含"陈水扁"字符串的所有文本节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("包含\"陈水扁\"字符串的文本节点:"+textnode.getText());
}
}
1 创建parser对象,有两种方式
Parser parser=new Parser(String html)
传入的html
第2种为:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
之后就可以进行访问parser中解析好的内容了
2 解析时,有两类方式,visitor方式和filter过滤方式,vistior方式需要遍历每一个节点,
而filter方式则是过滤。
3 visitor方式的例子;
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建LinkFindingVisitor对象
LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://news.qq.com/");
//查找http://www.qq.com的链接个数
parser.visitAllNodesWith(lvisitor);
System.out.println("网页中包含http://news.qq.com/的链接个数:"+lvisitor.getCount());
}catch(Exception ex){
ex.printStackTrace();
}
/** TextExtractingVisitor类的用法举例 */
public static void testTextExtractingVisitor(String url){
try{
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFindingVisitor对象
TextExtractingVisitor visitor = new TextExtractingVisitor();
//去除网页中的所有标签,提出纯文本内容
parser.visitAllNodesWith(visitor);
System.out.println("网页的纯文本内容为:"+visitor.getExtractedText());
}catch(Exception ex){
ex.printStackTrace();
}
}
4 还可以自定义nodevisitor来扩展nodevisitor,重载其中的各方法:
/** 自定义NodeVisitor子类,并重载抽象类NodeVisitor中的相关方法 */
public class MyNodeVisitor extends NodeVisitor {
/** 重载抽象类NodeVisitor的beginParsing方法,解析开始时调用此方法 */
public void beginParsing(){
System.out.println("开始解析HTML内容......");
}
/** 重载抽象类NodeVisitor的finishedParsing方法,解析结束时调用此方法 */
public void finishedParsing(){
System.out.println("整个HTML内容解析完毕!");
}
/** 重载抽象类NodeVisitor的visitTag方法,遇到开始标签时调用此方法 */
public void visitTag(Tag tag){
System.out.println("开始当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitEndTag方法,遇到结束标签时调用此方法 */
public void visitEndTag(Tag tag){
System.out.println("结束当前标签: "+tag.getText());
}
/** 重载抽象类NodeVisitor的visitStringNode方法,遇到文本节点时调用此方法 */
public void visitStringNode(Text string){
System.out.println("当前文本节点: "+string);
}
/** 重载抽象类NodeVisitor的visitRemarkNode方法,遇到注释时调用此方法 */
public void visitRemarkNode(Remark remark){
System.out.println("当前注释: "+remark);
}
5 使用filter方式过滤
基本用法:
TagNameFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建TagNameFilter实例
NodeFilter filter = new TagNameFilter ("DIV");
//筛选出所有DIV标签节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
AndFilter类用法
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建HasAttributeFilter实例
NodeFilter filter1 = new HasAttributeFilter("id");
//创建TagNameFilter实例
NodeFilter innerFilter = new TagNameFilter ("DIV");
//创建HasChildFilter实例
NodeFilter filter2 = new HasChildFilter(innerFilter);
//创建AndFilter实例
NodeFilter filter = new AndFilter(filter1, filter2);
//筛选出所有具有id属性且拥有子节点的所有DIV节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("当前DIV:"+textnode.getText());
}
}
StringFilter类用法:
//通过指定URLConnection对象创建Parser对象
Parser parser = new Parser((HttpURLConnection)(new URL(url)).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建StringFilter实例
NodeFilter filter = new StringFilter("陈水扁");
//筛选出所有包含"陈水扁"字符串的所有文本节点
NodeList nodes = parser.extractAllNodesThatMatch(filter);
if(nodes!=null) {
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("包含\"陈水扁\"字符串的文本节点:"+textnode.getText());
}
}
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1602方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2027前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3484info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2248import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 501https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 700public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 626https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 679https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 445https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5571 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3114微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 628https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1851什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 974本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1384原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 874public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 680在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 948-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 778一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1915介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
6. **示例代码**:描述中提到的"自己写了一个小例子",这通常是演示如何使用HTMLParser库的代码,包含了如何实例化解析器、加载HTML、选择元素、提取数据等基本操作。通过分析这个demo,我们可以快速上手使用这个库...
5. **API设计**:HTMLParser的API设计简洁明了,易于学习和使用。开发者可以通过`HTMLDocument`、`Tag`、`Attribute`等类来操作HTML元素,通过`Handler`接口来定义自定义的事件处理器。 6. **兼容性**:HTMLParser ...
总结来说,Winista.Htmlparser是一个强大且易用的C# HTML解析库,提供了丰富的API和事件机制,使得处理HTML变得简单。通过深入研究其源码,开发者可以更好地理解HTML解析的过程,提高程序的效率和准确性。配合提供的...
9. **学习与实践**:要深入理解和使用HTMLParser,需要掌握基本的HTML语法,熟悉DOM操作,以及理解如何通过编程语言(如Java)与解析器进行交互。实践是提高的关键,可以尝试解析一些实际的HTML文档,提取特定信息,...
总结来说,HTMLParser是一个强大且灵活的HTML解析工具,适合处理各种HTML文档,特别是当需要在Java环境中进行HTML内容的解析和处理时,它提供了一种高效且无依赖的解决方案。通过阅读源码、文档以及使用提供的例子,...
- "HtmlParser学习笔记总结.doc":对学习过程的总结,可能包含常见问题解答和最佳实践。 - "yanghaisheng.platform.htmlparser.rar":可能包含一个示例平台或项目,供用户实践和参考。 总之,HtmlParser是Java中一...
在众多的HTML解析工具中,`htmlParser`脱颖而出,以其易用性和高效性成为许多开发者的选择。本篇文章将深入探讨`htmlParser`这一...通过学习和熟练掌握`htmlParser`,开发者可以更高效地完成网页数据的抓取和处理任务。
总结来说,C# HTMLParser是一个强大的工具,可以帮助开发者轻松地解析和操作HTML文档。通过熟悉它的API和方法,你可以有效地提取和处理网页中的信息。结合实际项目需求,不断探索和实践,你会发现HTMLParser在处理...
HTMLParser教程是一个面向开发者的学习资源,它主要涵盖了如何在编程中解析和处理HTML文档的核心概念。这个教程可能包括了Python的HTMLParser库的使用,也可能涉及其他编程语言中的类似库,如Java的jsoup或...
总结来说,HTMLParser爬取气象信息的实例展示了如何利用Python的内置解析器来提取网页中的特定信息。通过定义自定义的事件处理器,我们可以根据需要处理HTML文档中的元素,从而有效地获取和分析数据。结合其他工具,...
总结,HTMLParser是一个强大的HTML处理工具,其简洁的API和事件驱动模型使得处理HTML文档变得轻松。通过熟练掌握HTMLParser,开发者可以更高效地解析、提取和操作HTML数据,从而在Web开发中实现更多功能。
标题“由新水浒到htmlparser的一次运用”暗示了这篇...同时,压缩包中的"HTMLParser+API.CHM"文件很可能是HTMLParser的API文档,包含了关于库的所有函数、方法和类的详细说明,是学习和使用HTMLParser的重要参考资料。
总结来说,Winista.Htmlparser是一个针对C#开发者的高效网页解析工具,它提供了简单易用的API、优秀的性能以及丰富的自定义可能性。无论你是初次接触网页解析,还是有经验的开发者,这个类库都能帮助你轻松地处理...
总结来说,"htmlparser:cpp htmlparser实现"是一个专注于在C++中解析HTML文档的库,它涉及到了HTML语法规则的理解、解析器设计模式的运用、内存管理、事件驱动编程、DOM树构建、错误处理、性能优化以及库的可扩展性...
总结,"java 新浪网易搜狐新闻抓取源码"项目展示了如何使用Java和HTMLParser库来实现新闻数据的抓取和处理。通过学习和实践这样的项目,开发者不仅可以掌握网页抓取的基本技能,还能深入理解HTTP协议、HTML解析以及...
根据提供的文档内容,我们可以总结出以下关键知识点,这些知识点主要围绕Lucene+Solr以及HtmlParser在正文提取方面的应用。 ### HtmlParser与ContentExtractor **HtmlParser简介:** HtmlParser是一个用于解析HTML...
**1.4 本章小结** - **概述:** 总结了本章的主要内容,并为接下来的技术讲解做了铺垫。 #### 二、搜索引擎核心技术详解 **2.1 30分钟实现的搜索引擎** - **步骤说明:** - 准备工作环境(10分钟) - 编写代码...
### Python语法总结 #### 1. Python 3 ##### 1.1 数据类型 Python 提供了多种内置的数据类型,这些类型是理解任何 Python 程序的基础。 ###### 1.1.1 整数,浮点数,字符串,布尔值(True、False),空值(None...
通过查看和学习这个项目的源码,你可以了解到如何将WebMagic应用于实际的爬虫工程,如何组织项目结构,以及如何处理数据抓取过程中的各种问题,如反爬机制、数据清洗和存储等。 总结来说,"基于 webmagic 的 Java ...
- **11.4 本章小结**:总结了本章的关键知识点,为后续章节的学习打下基础。 #### 第2章:遍历搜索引擎技术 - **2.1 30分钟实现的搜索引擎**: - **2.1.1 准备工作环境(10分钟)**:介绍如何搭建开发环境,包括...