HtmlParser应用
HtmlParser应用,使用Filter从爬取到的网页中获取需要的内容
{
String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
//获取页面中的<a href='xxx' [属性]>格式的链接
nodeFilterTagClass(url, "UTF-8", LinkTag.class);
//或取页面中的<img src='xxx' [属性='属性值']>格式的链接
nodeFilterTagClass(url, "UTF-8", ImageTag.class);
//或取页面<title>xxxx</title>标题
nodeFilterTagClass(url, "UTF-8", TitleTag.class);
//获取页面<div [属性='属性值']> xxx</div>
//nodeFilterTagClass(url, "UTF-8", Div.class);
}

程序运行结果:
TagNameFilter实例应用
是最容易理解的一个Filter,根据Tag的名字进行过滤

/**
*
* 根据标签名过滤页面中的标签信息
*
* @param url 要解析的url页面
* @param encoding 使用的字符编码
* @param tagName 标签名
*/
public static void nodeFilterTagName(String url,String encoding,String tagName){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//过滤页面中的链接标签
NodeFilter filter = new TagNameFilter(tagName);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println("link is :" + node.toHtml());
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) { String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home"; //获取页面中的<a href='xxx' [属性]>格式的链接
nodeFilterTagName(url, "UTF-8", "a"); //或取页面中的<img src='xxx' [属性='属性值']>格式的链接
nodeFilterTagName(url, "UTF-8", "img"); //获取页面中的<div>链接
//nodeFilterTagName(url, "UTF-8", "div"); }

程序运行结果同上
StringFilter实例应用
过滤显示字符串中包含指定内容的标签节点。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示

/**
* 过滤显示字符串中包含指定内容的标签节点。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示
*
* @param url 请求处理的url
* @param encoding 字符编码
* @param containStr包含的指定内容
*/
public static void stringFilter(String url,String encoding,String containStr){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是结合几种过滤条件的‘或’过滤器
NodeFilter filter = new StringFilter(containStr);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println("link is :" + node.toHtml());
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) { String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
stringFilter(url, "UTF-8", "img.baidu.com"); }

程序运行结果
OrFilter实例应用
OrFilter是结合几种过滤条件的‘或’过滤器,与此相反的是AndFilter,AndFilter是集合几个过滤条件的‘与’过滤器

/**
* OrFilter是结合几种过滤条件的‘或’过滤器
*
* 一般主题信息包含在下列标签中:<table>、<tr>、<td>、<p>、<div>等。如果要过滤出这些节点标签,可以使用OrFilter过滤器
*
* @param url 请求处理的url
* @param encoding 使用的字符编码
* @param filters 多个过滤器数组
*/
public static void orMultiFilter(String url,String encoding,NodeFilter[] filters){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是结合几种过滤条件的‘或’过滤器
NodeFilter filter = new OrFilter(filters);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println("link is :" + node.toHtml());
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) { String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
//过滤多个标签 或关系
NodeFilter[] filters = new NodeFilter[3];
filters[0] = new NodeClassFilter(TableTag.class);
filters[1] = new NodeClassFilter(ParagraphTag.class);
filters[2] = new NodeClassFilter(ImageTag.class);
orMultiFilter(url, "UTF-8", filters); }

程序运行结果:
RegexFilter与LinkRegexFilter实例应用
RegexFilter根据正则表达式匹配节点.与LinkRegexFilter不同的是,LinkRegexFilter只在LinkTag中寻找匹配

/**
* 在文本中通过正则进行匹配
*
* @param url 请求处理的url
* @param encoding 字符编码
* @param regex 待匹配的正则表达式
*/
public static void regexStringFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是结合几种过滤条件的‘或’过滤器
NodeFilter filter = new RegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println("link is :" + node.toHtml());
} } catch (Exception e) {
e.printStackTrace();
}
} /**
* 在链接地址中进行正则匹配,返回的是Link结点
*
* @param url 请求url
* @param encoding 字符编码
* @param regex 待匹配的正则表达式
*/
public static void linkTagRegexFilter(String url,String encoding,String regex){
try {
Parser parser = new Parser();
parser.setURL(url);
if(null==encoding){
parser.setEncoding(parser.getEncoding());
}else{
parser.setEncoding(encoding);
}
//OrFilter是结合几种过滤条件的‘或’过滤器
NodeFilter filter = new LinkRegexFilter(regex);
NodeList list = parser.extractAllNodesThatMatch(filter);
for(int i=0; i<list.size();i++){
Node node = (Node)list.elementAt(i);
System.out.println("link is :" + node.toHtml());
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) { String url = "F:/dennisit/email.txt"; String emailRegex = "[a-zA-Z0-9_-]+@\\w+\\.[a-z]+(\\.[a-z]+)?";
regexStringFilter(url, "UTF-8", emailRegex);
System.out.println("-------------------------------------------");
linkTagRegexFilter(url, "UTF-8", emailRegex); }

程序运行结果
转载请注明出处:[http://www.cnblogs.com/dennisit/p/3191803.html]
HtmlParser应用的更多相关文章
- HttpClient 与 HtmlParser 简介 转载
转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...
- HTMLParser使用
htmlparser[1] 是一个纯的java写的html(标准通用标记语言下的一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或提取html.它能超高速解析html,而且不会出错.现 ...
- python--爬虫入门(八)体验HTMLParser解析网页,网页抓取解析整合练习
python系列均基于python3.4环境 基本概念 html.parser的核心是HTMLParser类.工作的流程是:当你feed给它一个类似HTML格式的字符串时,它会调用goahead方法 ...
- 使用 HttpClient 和 HtmlParser 实现简易爬虫
这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...
- 爬虫技术 -- 基础学习(四)HtmlParser基本认识
利用爬虫技术获取网页源代码后,针对网页抽取出它的特定文本内容,利用正则表达式和抽取工具,能够更好地抽取这些内容. 下面介绍一种抽取工具 -- HtmlParser HtmlParser是一个用来解析H ...
- Delphi7的HtmlParser使用方法
uses HtmlParser procedure TForm4.Button1Click(Sender: TObject); var FNodes:IHtmlElement; aString:str ...
- 读代码之htmlParser
在以前使用HtmlParser时,并未考虑过遇到org.htmlparser.tags之外的Tag怎么处理.直到碰到这样的一个标签,如果不加处理,HtmlParser无法对其进行处理.查阅自定义标签之 ...
- 黄聪:C#解析HTML DOM解析类 HtmlParser.Net 下载
下载地址:HtmlParser.Net.rar 帮助文档:htmlparser.rar 背景: HTMLParser原本是一个在sourceforge上的一个Java开源项目,使用这个Java类库可以 ...
- HtmlParser + HttpClient 实现爬虫
简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地:HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向 ...
- HtmlParser
HtmlParser 基本类库使用 HtmlParser 提供了强大的类库来处理 Internet 上的网页,可以实现对网页特定内容的提取和修改.下面通过几个例子来介绍 HtmlParser 的一些使 ...
随机推荐
- Font-Awesome 体验 鼠标进入图标变大
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- 6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...
- Excel 宏
实现1到40行的第一列 ,全部 累加一个字符串 A1 Sub Macro1() Dim i As IntegerFor i = 1 To 40Sheets(1).Cells(i, 1).Value = ...
- ApacheBench(ab)使用简介
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_lo ...
- C#yield return和yield break
C#yield return和yield break 晚上好,各位.今天结合书中所讲和MSDN所查,聊下yield关键字,它是我们简化迭代器的关键. 如果你在语句中使用了yield关键字,则意味着它在 ...
- td中的值自动换行
设置td中的值自动换行在<td ></td> 中加上这样一句代码,可以简省设置,使长字符串换行.而不用设置width,height. style="word-wrap ...
- [转载]C#播放流媒体的几种方法
做视频开发要学的东西真多,不知道如何入门,乱打乱撞,慢慢摸索吧! 首先搭建Windows Meida Server ,方法很简单,试试就会.在这里需要声明的是,这几种方法 都可以播放 本地视频.并且基 ...
- SQL点滴8—the account is currently locked out. The system administrator can unlock it.
原文:SQL点滴8-the account is currently locked out. The system administrator can unlock it. 今天遇到的问题比较有意思. ...
- PE文件结构(五岁以下儿童)基地搬迁
PE文件结构(五岁以下儿童) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会如果程序被装入时使用的默认ImageBase基地址(VC默认 ...
- 异步提交form的时候利用jQuery validate实现表单验证
异步提交form的时候利用jQuery validate实现表单验证相信很多人都用过jquery validate插件,非常好用,并且可以通过下面的语句来自定义验证规则 // 电话号码验证 ...