一,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. PHP Json函数不能处理中文的解决办法

    PHP5.2 新增的 json 功能是非常受欢迎的,但是经过测试发现,json_encode 对中文的处理是有问题的: 不能处理GB编码,所有的GB编码都会替换成空字符: utf8编码的中文被编码成u ...

  2. AOP原理

    AOP(面向切面编程):扩展功能时不修改源代码,采用横向抽取机制 纵向抽取机制: 横向抽取机制: 第一种情况: 第二种情况:

  3. 【linux+C】神器 vim + 指针相关客串

    前篇回顾 上篇介绍了linux下C编程基本环境配置以及相关工具使用选择. 不过10个大牛9个用vim,那么咱们就来玩vim.linux下玩c就别依靠图形界面.好吧告别Ide,命令行才是c的王道. 本篇 ...

  4. 想要删除table的某一行的js写法

    <tr><td onclick="del_tr(this)" >删除</td></tr> // 删除一行 function del_ ...

  5. html5 滚动小球

    <html> <head> <meta charset="utf-8"/> </head> <body onkeydown=& ...

  6. <正则吃饺子> :关于前端往后端传递布尔值参数的问题

    问题是在一个群里看到的,通过自己查找和实验,参考网上的博文,将问题列出来.以帮助后来者和共同交流学习.   博文地址:http://blog.sina.com.cn/s/blog_13c30757a0 ...

  7. java定时器Timer的使用

    Time类主要负责完成定时计划任务的功能,就是在指定的时间的开始执行某个任务. Timer类的作用是设置计划任务,而封装任务内容的类是TimerTask类.此类是一个抽象类,继承需要实现一个run方法 ...

  8. 1.3-1.4 hive环境部署

    一. 官网:http://hive.apache.org/ 下载:http://archive.apache.org/dist/hive/ GitHub:https://github.com/apac ...

  9. mysql 、redis的区别

    我们知道,mysql是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc).首先,用户访问mc,如果未命中,就 ...

  10. Subresource Integrity(子资源一致性)和JS DDos 攻击

    以下文章转载自 http://www.cnblogs.com/zoucaitou/p/4505483.html 和 http://www.puronglong.com/blog//2015/04/12 ...