利用HtmlParser解析网页内容
一,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解析网页内容的更多相关文章
- 基于htmlparser实现网页内容解析
基于htmlparser实现网页内容解析 网页解析,即程序自动分析网页内容.获取信息,从而进一步处理信息. 网页解析是实现网络爬虫中不可缺少而且十分重要的一环,由于本人经验也很有限,我仅就我们团队开发 ...
- Android利用Jsoup解析html 开发网站客户端小记。
这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- 利用XPath解析带有xmlns的XML文件
在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中 ...
- java中利用dom4j解析XML文件
官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...
- Python3.x:BeautifulSoup()解析网页内容出现乱码
Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) Beau ...
- 用HTMLParser解析html时报错:No module named 'htmlentitydefs'
python3.6用HTMLParser解析html时报错 No module named 'htmlentitydefs'或No module named 'markupbase' 先上代码 fro ...
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...
- Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中
利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...
随机推荐
- CSS控制文本的长度,超过一行显示省略号
代码如下: <div style="width:100px;height:20px;text-overflow:ellipsis; white-space:nowrap; overfl ...
- python cassandra 创建space table并写入和查询数据
from cassandra.cluster import Cluster cluster = Cluster(["10.178.209.161"]) session = clus ...
- css 浏览器兼容性问题集合
http://www.xidayun.com/index.php/2016/05/16/941/ 文章取自前端蜂小客
- Vijos P1794 文化之旅
标签: 搜索图结构 最短路 NOIP普及组2012 ...
- System.exit(0);和finish();,push原理
今天师姐问我安卓后台的问题,想起几年前做进制转换的时候特意研究了一下怎么才能「不驻留内存地退出」.虽然Android不推荐用户手动关闭进程,但是在那个内存捉襟见肘的年代,不得不考虑内存. 首先直接按b ...
- const用在成员函数之后的情况
常成员函数 使用const关键字进行说明的成员函数,称为常成员函数.只有常成员函数才有资格操作常量或常对象,没有使用const关键字说明的成员函数不能用来操作常对象.常成员函数说明格式 ...
- dubbo项目中包的依赖说明
依赖 (+) (#) 必需依赖 JDK1.5+ 理论上Dubbo可以只依赖JDK,不依赖于任何三方库运行,只需配置使用JDK相关实现策略. 缺省依赖 通过mvn dependency:tree > ...
- codevs-1203
1203 判断浮点数是否相等 题目描述 Description 给出两个浮点数,请你判断这两个浮点数是否相等 输入描述 Input Description 输入仅一行,包含两个浮点数 输出描述 ...
- 我所理解的Restful API最佳实践
一直在公司负责API数据接口的开发,期间也遇到了不小的坑,本篇博客算是做一个小小的记录. 1. 不要纠结于无意义的规范 在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软 ...
- Hibernate使用Query进行查询
错误结果如下 Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: new ...