用Java的模式匹配来提取网页中所需内容

来源:互联网 发布:羽绒枕品牌 知乎 编辑:程序博客网 时间:2024/06/11 02:54

本篇主要以实际例子来说明一下怎么样用java的模式匹配来提取网页中你所需要的内容,比如说你需要提取一个网页中的<title></title>标签内的文字内容该如何做呢?下面我会做一个介绍。介绍之前我先说明一下此系列文章的目的。我们将会持续写一些关于webspider的技术的文章,结合的例子就是我们前一段时间做的一个入门级的爬虫,我们将来也会把这个爬虫整体的共享出来。
        好言归正传,进入今天的主题,今天要讲的内容是建立在上一篇基础上的,也就是你需要对上一篇的正则表达式有个了解,至少要能看懂,当然也要对java熟悉。   
       首先第一个是上面提到的提取<title>标签的内容。先看代码

    public synchronized String parseTitle(String context)
    {
        String result="";
        String patWhTitle="<//s*?(title)//s*?>[//s//S]*?<///s*?(title)//s*?>";
        String patTitle="</?//s*?(title)//s*?>";
        Pattern titlePattern=Pattern.compile(patWhTitle,2);
        Matcher titleMatcher=titlePattern.matcher(context);
        Pattern titlePattern2=Pattern.compile(patTitle, 2);
       
        while(titleMatcher.find())
        {
            String title=titleMatcher.group();
            Matcher titleMatcher2=titlePattern2.matcher(title);
            result+="["+titleMatcher2.replaceAll("")+"]";
        }
        return result;
    }
首先定义两个正则表达式 patWhTitle,这个是要匹配网页中所有<title>标签和标签的内容。patTitle这个正则是只匹配<title>标签。
然后编译匹配等等
本篇所要讲的和上一篇有些不同,多了一步匹配,相信大家都看出来了,这是怎么回事呢?为什么要这么做呢?我结合这个title例子大概讲一下匹配的过程,其他的也都是类似。1、从网页中匹配出所有<title>标签及其内容,e.g<title>myspace</title>。2、从匹配到的string再次匹配出标签。3、然后调用replaceall方法来把标签都替换成“”,只剩下需要的内容。

不知道我是否讲解的清楚了,再贴一个函数来练习下
    public synchronized String parseA(String context)
    {
        String result="";
        String patWhA="<[a]//s+?[^>]*?>[^<]+?</[a]//s*?>";
        String patA="</?//s*?[a][//s//S]*?>";
        Pattern aPattern=Pattern.compile(patWhA,2);
        Matcher aMat=aPattern.matcher(context);
        Pattern aPattern2=Pattern.compile(patA,2);
        while(aMat.find())
        {
            String a=aMat.group();
            Matcher mat=aPattern2.matcher(a);
            result+="["+mat.replaceAll("")+"]";
        }
        return result;
    }
这个函数是提取超链接的内容

原创粉丝点击