`
人生难得糊涂
  • 浏览: 117693 次
社区版块
存档分类
最新评论

HtmlParser应用,使用Filter从爬取到的网页中获取需要的内容

 
阅读更多

htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0

下载地址http://sourceforge.net/projects/htmlparser/ 

在线APIhttp://www.ostools.net/apidocs/apidoc?api=HTMLParser

Filter就是对于结果进行过滤,取得需要的内容。HTMLParserorg.htmlparser.filters包之内一共定义了15个不同的Filter

AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter 、TagNameFilter.

常用的几个过滤器说明 

TagNameFilter:   
是最容易理解的一个Filter,根据Tag的名字进行过滤

HasChildFilter: 
是返回有符合条件的子节点的节点,需要另外一个Filter作为过滤子节点的参数。

HasAttributeFilter:
可以匹配出包含制定名字的属性,或者制定属性为指定值的节点。HasParentFilter和HasSiblingFilter的功能与HasChildFilter类似。

StringFilter:    
这个Filter用于过滤显示字符串中包含指定内容的标签节点。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示

RegexFilter :   
根据正则表达式匹配节点.与LinkRegexFilter不同的是,LinkRegexFilter只在LinkTag中寻找匹配

NodeClassFilter: 
根据已定义的标签类获取节点

LinkStringFilter:
这个Filter用于判断链接中是否包含某个特定的字符串,可以用来过滤出指向某个特定网站的链接。

OrFilter:  
是结合几种过滤条件的'或'过滤器 

AndFilter:     
是结合几种过滤条件的'与'过滤器

实例应用

NodeClassFilter过滤器实例

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

程序运行结果:



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 使用举例

    前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。 Extraction(萃取)是一种常见的使用方式,例如: * 文本萃取:从网页中萃取出需要的文本信息。 * 连接萃取:从网页中萃取出...

    HtmlParser 实现简易爬虫

    在本场景中,我们讨论如何使用HTMLParser库来创建一个基础的网络爬虫,以便从网页上抓取和分析数据。 首先,我们需要了解HTMLParser的基本用法。HTMLParser设计为易于使用,它提供了对HTML元素、属性和文本的访问,...

    HtmlParser爬取气象信息实例

    总结来说,HTMLParser爬取气象信息的实例展示了如何利用Python的内置解析器来提取网页中的特定信息。通过定义自定义的事件处理器,我们可以根据需要处理HTML文档中的元素,从而有效地获取和分析数据。结合其他工具,...

    Htmlparser 网页内容抓取java

    HTMLParser是一款强大的Java库,专用于解析HTML文档并提取其中的...通过熟练掌握HTMLParser的用法,开发者可以高效地从海量的网页数据中获取有价值的信息,为数据分析、搜索引擎优化、自动化测试等多种场景提供支持。

    htmlparser抓取网页内容

    本项目以"htmlparser抓取网页内容"为主题,具体实践了如何利用HTMLParser库来从国家专利局的网站上抓取专利状态信息。 首先,我们要理解HTMLParser的工作原理。HTMLParser是Python的内置库,它提供了一个基础的事件...

    HTMLParser.net源代码HTMLParser.net使用demo

    本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...

    HTMLParser提取网页内容

    可以使用HTMLParser库提供的API来遍历DOM树,查找这些元素并获取其文本内容。 例如,对于标题提取,可以遍历HTML中的所有`&lt;h1&gt;`到`&lt;h6&gt;`标签,然后收集它们的文本;对于正文,可以寻找段落标签或其他可能包含正文...

    HtmlParser

    HTMLParser是用于解析HTML文档的一种工具或库,尤其在网络爬虫技术中扮演着关键角色。...然而,实际应用中还需要考虑如何处理异步加载的内容、登录和验证码等复杂情况,这需要更高级的爬虫技术和策略。

    htmlparser实现从网页上抓取数据.doc

    在IT领域,网页抓取(Web Scraping)是一项常见的任务,它涉及到从互联网上的网页中提取所需的数据。本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中...

    JAVA htmlparser 使用实例

    要在项目中使用`HtmlParser`,首先需要将其依赖添加到项目的构建文件中。如果是Maven项目,可以在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;com.lowagie&lt;/groupId&gt; &lt;artifactId&gt;htmlparser &lt;version&gt;2.0 ...

    使用 HttpClient 和 HtmlParser 实现简易网络爬虫

    在使用HttpClient和HtmlParser实现网络爬虫的过程中,首先需要设置开发环境。这里推荐使用Eclipse Europa作为集成开发环境(IDE),并确保安装了JDK 1.6。在Eclipse中创建一个新的JAVA工程,并将HttpClient和...

    C# HtmlParser使用小实例

    在使用Winista.HtmlParser之前,你需要先将其添加到你的C#项目中。如果你有`htmlparser源代码(bin下有所用dll).rar`文件,你可以从中解压出dll文件并将其添加为项目的引用。在Visual Studio中,右键点击项目,选择...

    htmlparser网页分析

    4. 使用示例:在"HTMLParser使用详解-Node内容.doc"中,可能详细介绍了如何创建和配置解析器对象,设置解析事件处理器,以及如何通过遍历节点来提取或修改HTML内容。例如,可以使用`TagStart`事件捕获元素开始,`...

    Java使用HtmlParser实现简单的网络爬虫.zip

    本文将详细讲解如何运用Java语言结合HtmlParser库来构建一个基础的网络爬虫,以便从网页中获取所需信息。 首先,HtmlParser是一个开源的Java库,专门用于解析HTML文档。它提供了强大的DOM(文档对象模型)接口,...

    HTMLParser抽取Web网页正文信息.doc

    ### HTMLParser抽取Web网页正文信息的关键知识点 ...通过上述步骤,HTMLParser不仅能够高效地从网页中提取正文信息,还能通过一系列智能算法确保提取的内容与主题高度相关,极大地提高了信息处理的效率和质量。

    HtmlParser提取网页信息的设计与实现

    本文将详细介绍如何利用HtmlParser这一开源工具来提取网页中的关键信息,并通过数据清洗将其存储到SQL数据库中,以便后续的数据分析和应用。 #### 二、HtmlParser概述 HtmlParser是一种轻量级、高效且易于使用的...

    htmlparser实现网页上抓取数据

    本文将深入探讨HTMLParser的工作原理、如何使用以及其在爬虫中的应用。 首先,理解HTMLParser的基本工作方式至关重要。HTMLParser是一个事件驱动的解析器,它读取HTML文档并触发预定义的事件,如遇到开始标签、结束...

    htmlparser实现从网页上抓取数据

    本文将详细介绍如何使用HTMLParser从网页上抓取数据,并通过一个具体的Java代码示例来演示其实现过程。 #### HTMLParser简介 HTMLParser是一个纯Java编写的HTML解析库,其最大的特点在于不需要依赖其他Java库即可...

    htmlparser库与教程

    实际应用中,HTMLParser常与网络请求库(如Apache HttpClient或OkHttp)结合使用,以获取远程网页内容,再进行后续的解析操作。同时,为了提高代码的可维护性和复用性,建议封装自己的数据抓取和处理模块。

    基于htmlparser的网页爬虫和java调用excel代码

    本项目就是利用HTMLParser库来编写一个基础的网页爬虫,用于爬取新浪新闻的数据,并将抓取到的数据存储到Excel表格中。以下是关于这个项目的一些关键知识点和实现细节: 1. **HTMLParser库**:HTMLParser是一个开源...

Global site tag (gtag.js) - Google Analytics