一,htmpparser介绍

  htmlparser是一个功能比较强大的网页解析工具,主要用于 html 网页的转换(Transformation) 以及网页内容的抽取 (Extraction)。

二,使用与示例

  1,提取网页某类型标签.这里,html的标签对应于一个标签类,如<img>标签对应于ImageTag.下面以提取<img>标签为例,输出网页图片地址:

        //读取文件内容
String html = IOUtils.toString(new FileInputStream(localFile), "UTF-8"); //创建html解析器
Parser parser = new Parser();
     //设置解析的网页内容
parser.setInputHTML(html); NodeList imageTags = parser.parse(new NodeClassFilter(ImageTag.class)); for(int i=0; i<imageTags.size(); i++){
ImageTag it = (ImageTag) imageTags.elementAt(i);
String imageUrl = it.getImageURL();
System.out.println(imageUrl);
}

  2,提取特定标签.当要提取出某个属性值为xx的标签时,需要自定义过滤器来设定规则,获得相对应的标签。

        String html = IOUtils.toString(new FileInputStream(localFile), "UTF-8");

        //创建html解析器
Parser parser = new Parser();
parser.setInputHTML(html); //自定义过滤器来拿到指定名字的标签<meta name="keywords">
NodeList metaTags = parser.parse(
new NodeFilter() { @Override
public boolean accept(Node node) {
if(node instanceof MetaTag){
MetaTag mt = (MetaTag) node; if(mt.getMetaTagName() != null && mt.getMetaTagName().equals("keywords")){
return true;
}
}
return false;
}
}
); for(int i=0; i<metaTags.size(); i++){
MetaTag mt = (MetaTag) metaTags.elementAt(i);
System.out.println("meta keyword value : " + mt.getMetaContent());
}

  3,通过以上的例子,熟悉了htmlparser的简单实用后,我们可以封装出一个方法,传入参数html内容,标签类型,标签属性名,标签属性值四个参数,就可返回特定标签列表。当然可以省略后两个参数,获得一系列某类标签。

    /**
* 提取具有某个属性的标签列表
* @param html 被提取的html文本
* @param tagType 标签类型
* @param attributeName 标签属性名称
* @param attributeValue 该属性的值
* @return
*/
public static <T extends TagNode> List<T> parseTags(String html,final Class<T> tagType,final String attributeName,final String attributeValue){ try {
Parser parser = new Parser();
parser.setInputHTML(html); //自定义过滤器来拿到指定名字的标签
NodeList nodeList = parser.parse(
new NodeFilter() { @Override
public boolean accept(Node node) {
//如果是同类型的标签
if(node.getClass() == tagType){
T t = (T) node; //只过滤该类型的标签
if(attributeName == null){
return true;
} String attrValue = t.getAttribute(attributeName);
//过滤掉特定属性名字的标签
if(attrValue != null && attrValue.equals(attributeValue)){
return true;
}
}
return false;
}
}
); List<T> tags = new ArrayList<T>();
for(int i=0; i<nodeList.size(); i++){
T t = (T) nodeList.elementAt(i);
tags.add(t);
}
return tags; } catch (Exception e) {
e.printStackTrace();
} return null;
}

最后,这里只是简单介绍htmlparser2使用方法,详细情况请参看其官方文档。

利用HtmlParser解析网页内容的更多相关文章

  1. 基于htmlparser实现网页内容解析

    基于htmlparser实现网页内容解析 网页解析,即程序自动分析网页内容.获取信息,从而进一步处理信息. 网页解析是实现网络爬虫中不可缺少而且十分重要的一环,由于本人经验也很有限,我仅就我们团队开发 ...

  2. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  3. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  4. 利用XPath解析带有xmlns的XML文件

    在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中 ...

  5. java中利用dom4j解析XML文件

    官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...

  6. Python3.x:BeautifulSoup()解析网页内容出现乱码

    Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) Beau ...

  7. 用HTMLParser解析html时报错:No module named 'htmlentitydefs'

    python3.6用HTMLParser解析html时报错 No module named 'htmlentitydefs'或No module named 'markupbase' 先上代码 fro ...

  8. IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数

    因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...

  9. Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中

    利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...

随机推荐

  1. 程序移植到VS2010,编译成功但是无法启动lib文件

    今天遇到的这个问题,是由于解决方案下有多个项目,其中包含生成库的项目,也有可执行程序的项目 解决方法:邮件解决方案,属性-通用属性-启动项目进行设置就OK了,我的是设置单启动项目为包含可执行程序的项目 ...

  2. html5--5-2 绘制直线

    html5--5-2 绘制直线 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么是canva ...

  3. linux应用之tomcat的安装及配置(centos)

    CentOS 6.6下安装配置Tomcat环境 [日期:2015-08-25] 来源:Linux社区  作者:tae44 [字体:大 中 小]   实验系统:CentOS 6.6_x86_64 实验前 ...

  4. linux应用之基本命令

    linux操作系统的应用层可以细分为两层:1.系统服务层(包括GUI shell.CUI shell.cron.ftp.远程登录openssh等由init调用的服务)2.系统命令和用户应用. linu ...

  5. HihoCoder 1508 : 剑刃风暴(占位)

    描述 主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”. 现在战场上有N名敌对英雄,他们的位置分别为(Xi, Yi),而剑刃风暴的伤害范围是一个半径为R的 ...

  6. Can't locate Log/Dispatch.pm in @INC

    记录一下配置mha的时候遇到的错误,使用perl模块发送邮件的时候报以下错误: # masterha_check_ssh --conf=/data/mha/app1.cnf Can't locate ...

  7. C++日志之获取函数的名字,行号,文件名

    在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名.行号.函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__ 先介绍几个编译器内置的宏定 ...

  8. UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数

    一.IPv4与IPv6的互操作性 1.IPv4客户与IPv6服务器 拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户.这是通过使用IPv4映射 ...

  9. Android Studio工程Gradle编译报错

    一.环境的搭建: 首先搭建好AndroidStudio环境.我使用的是Ubuntu 12.04系统(由于此机器还要运行其他程序,为避免兼容性问题,暂未更新到最新,而继续沿用此稳定版),java和jdk ...

  10. 写出高效优美的单片机C语言代码

    程序能跑起来并不见得你的代码就是很好的c代码了,衡量代码的好坏应该从以下几个方面来看 1,代码稳定,没有隐患. 2,执行效率高. 3,可读性高. 4,便于移植. 下面发一些我在网上看到的技巧和自己的一 ...