利用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 ...
随机推荐
- jquery特效(8)—倒计时
最近公司在做一个答题的小游戏,每道题可以有20秒时间作答,超过时间就要给出相应的提醒,由于20秒时间太长,不适合做GIF动态图,下面来看一下我写的5秒倒计时的测试程序结果: 一.主体程序: <! ...
- 追求代码质量: 用 AOP 进行防御性编程
原文出处: IBM中国 开发人员测试的主要缺点是:绝大部分测试都是在理想的场景中进行的.在这些情况下并不会出现缺陷 —— 能导致出现问题的往往是那些边界情况. 什么是边界情况呢?比方说,把 null ...
- Unable to create Debug Bridge:Unable to start adb server:error:cannot parse version
打开Android Studio时报如下错误提示: Unable to create Debug Bridge:Unable to start adb server:error:cannot pars ...
- css父元素背景覆盖其子元素背景
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 支持源码单步调试QT库编译笔记
支持源码单步调试QT库编译笔记 编译环境:windows 10 编译工具:mingw_4_4_0 Qt源码版本:qt-everywhere-opensource-src-4.8.5(下载地址:http ...
- 洛谷P3385判负环——spfa
题目:https://www.luogu.org/problemnew/show/P3385 两种方法,dfs和bfs: 一开始写的dfs,要把dis数组初值赋成0,这样从一个连着负边的点开始搜: 在 ...
- mongodb "$"的作用
{ "_id": ObjectId("58e48e32830f398e8f401a95"), "_class": "com.ydd ...
- mysql慢日志记录
DBA工作:通过日志找到执行慢的sql语句 慢日志: - 执行时间 > 10 - 未命中索引 配置: - 基于内存 show variables like '%query%'; set glob ...
- Linux 软链接 硬链接 ln命令(繁杂版)
注意:创建软连接的时候,要用绝对路径!!! 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln - ...
- kuangbin带你飞 - 合集
[题目列表] 之前有一些做过了的,这次从数论开始?