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]

热爱生活,热爱Coding,敢于挑战,用于探索 ...
 

HtmlParser应用的更多相关文章

  1. HttpClient 与 HtmlParser 简介 转载

    转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...

  2. HTMLParser使用

    htmlparser[1] 是一个纯的java写的html(标准通用标记语言下的一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或提取html.它能超高速解析html,而且不会出错.现 ...

  3. python--爬虫入门(八)体验HTMLParser解析网页,网页抓取解析整合练习

    python系列均基于python3.4环境  基本概念 html.parser的核心是HTMLParser类.工作的流程是:当你feed给它一个类似HTML格式的字符串时,它会调用goahead方法 ...

  4. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  5. 爬虫技术 -- 基础学习(四)HtmlParser基本认识

    利用爬虫技术获取网页源代码后,针对网页抽取出它的特定文本内容,利用正则表达式和抽取工具,能够更好地抽取这些内容. 下面介绍一种抽取工具 -- HtmlParser HtmlParser是一个用来解析H ...

  6. Delphi7的HtmlParser使用方法

    uses HtmlParser procedure TForm4.Button1Click(Sender: TObject); var FNodes:IHtmlElement; aString:str ...

  7. 读代码之htmlParser

    在以前使用HtmlParser时,并未考虑过遇到org.htmlparser.tags之外的Tag怎么处理.直到碰到这样的一个标签,如果不加处理,HtmlParser无法对其进行处理.查阅自定义标签之 ...

  8. 黄聪:C#解析HTML DOM解析类 HtmlParser.Net 下载

    下载地址:HtmlParser.Net.rar 帮助文档:htmlparser.rar 背景: HTMLParser原本是一个在sourceforge上的一个Java开源项目,使用这个Java类库可以 ...

  9. HtmlParser + HttpClient 实现爬虫

    简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地:HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向 ...

  10. HtmlParser

    HtmlParser 基本类库使用 HtmlParser 提供了强大的类库来处理 Internet 上的网页,可以实现对网页特定内容的提取和修改.下面通过几个例子来介绍 HtmlParser 的一些使 ...

随机推荐

  1. DOS批处理的字符串功能

    原文:DOS批处理的字符串功能 DOS批处理的字符串功能 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特 ...

  2. Oracle利用存储过程性 实现分页

    分页的简单配置 在上一次已经说过了 这边说说怎么在存储过程中实现分页 首先建立存储过程 參考 http://www.cnblogs.com/gisdream/archive/2011/11/16/22 ...

  3. NET中异常处理的最佳实践

    NET中异常处理的最佳实践 本文翻译自CodeProject上的一篇文章,原文地址. 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 ...

  4. 萧墙HTML5手机发展之路(51)——jquerymobile在提高页面访问速度

    正在使用jQuery Mobile开发时间可以选择单页模板和多页模板,在单页模板时从一个页面跳转到另一个页面时从需要server要求.用户会感到轻微的停顿. 使用多页模板,为了改善网页之间跳跃的流畅, ...

  5. sql点滴42—mysql中的数据结构

    原文:sql点滴42-mysql中的数据结构 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小 ...

  6. MVC的TryUpdateModel

    MVC的TryUpdateModel 我们在使用MVC的时候,给model赋值只需要 TryUpdateModel(model) 就搞定了,而在webForm,winForm中,我们要写长长的 xx. ...

  7. jquery+ligerform三级联动下拉框

    如下为ligerform里的三级联动下拉框: var formData=[ {display:,width:,space:,type:"select",group:"区域 ...

  8. openwrt驱动与应用程序的联系

    应用程序与驱动之间需要进行命令的传递,因而它们之间需要共同定义一套双方都可以识别的数据结构,实际使用时它们include的是名字和内容相同但位置不同的头文件. 比如spi_gpio_ad7193.h这 ...

  9. 使用.net备份和还原数据库

    原文:使用.net备份和还原数据库 CSDN网友的提问http://community.csdn.net/Expert/TopicView3.asp?id=4929678C#实现SQLSERVER20 ...

  10. 同TTX更可爱的层次分析法游戏破解

    最近的工作太忙,没啥时间写文章,今天遇到一点点的游戏,浅析.以中午的优势写这篇文章. 移动MM的游戏.前面我们已经写过非常多文章,没有看过的朋友,自行查找就可以,今天我们继续分析一个类似的游戏,只是使 ...