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

本篇主要以实际例子来说明一下怎么样用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;
    }
这个函数是提取超链接的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值