Java正则表达式获取网页所有网址和链接文字

/*获取网址首页的所有网址和链接文字*/


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



import java.net.*;
import java.io.*;
import java.util.regex.*;

/*
根据指定的规则,通过构造正则表达式获取网址
*/


public class Urls
...{
    
private String startUrl;                                         //开始采集网址
    String  urlContent;
    String ContentArea;
    
private String strAreaBegin ,strAreaEnd ;            //采集区域开始采集字符串和结束采集字符串
    private String stringInUrl,stringNotInUrl;        
    String strContent;
//获得的采集内容
    String[] allUrls;                                                            //采集到的所有网址
    private String  regex;                                                 //采集规则
    
    UrlAndTitle   urlAndTitle
=new UrlAndTitle();    //存储网址和标题                    
    
    
    
public static void main(String[] args)
    
...{
         Urls myurl
=new Urls("<body","/body>");
         myurl.getStartUrl("http://www.zuzwn.com/");

         myurl.getUrlContent();
         myurl.getContentArea();
         myurl.getStartUrl("http://www.zuzwn.com/");

         myurl.getStringNotInUrl(
"google");
         myurl.Urls();
         
        
//System.out.println("startUrl:"+myurl.startUrl);
        
//System.out.println("urlcontent:"+myurl.urlContent);
        
//System.out.println("ContentArea:"+myurl.ContentArea);
 
    }

    
    
    
//初始化构造函数 strAreaBegin 和strAreaEnd
 
    
public Urls (String strAreaBegin,String strAreaEnd)
    
...{
        
this.strAreaBegin=strAreaBegin;
        
this.strAreaEnd=strAreaEnd;
  }

  
  
//
    public void Urls()
    
...{
        
int i=0;
        
//String regex ="<a href="?'?http://[a-zA-Z0-9]+/.[a-zA-Z0-9]+/.[a-zA-Z]+/?[/.?[/S|/s]]+[a>]$";
        String regex ="<a.*?/a>";
         
//String regex ="http://.*?>";
        Pattern pt=Pattern.compile(regex);
        Matcher mt
=pt.matcher(ContentArea);
        
while(mt.find())
         
...{
                 System.out.println(mt.group());
                 i
++;
                 
                 
//获取标题
                 Matcher title=Pattern.compile(">.*?</a>").matcher(mt.group()); 
                 
while(title.find())
                 
...{
                      System.out.println(
"标题:"+title.group().replaceAll(">|</a>",""));
                 }

                 
                 
//获取网址
                 Matcher myurl=Pattern.compile("href=.*?>").matcher(mt.group()); 
                 
while(myurl.find())
                 
...{
                      System.out.println(
"网址:"+myurl.group().replaceAll("href=|>",""));
                 }

                 
                 System.out.println();
                 
                 
         }

      
        System.out.println(
"共有"+i+"个符合结果");
        
    }
    
 
    
    
//获得开始采集网址
    public void getStartUrl(String startUrl)
    
...{
        
this.startUrl=startUrl;
    }

    
    
//获得网址所在内容;
    public void getUrlContent()
    
...{
        
        StringBuffer is
=new StringBuffer();
        
try
        
...{
            URL myUrl
=new URL(startUrl);
            BufferedReader br
= new BufferedReader(
                                                        
new InputStreamReader(myUrl.openStream()));
                                                            
            String s;                                                
            
while((s=br.readLine())!=null)
            
...{
                is.append(s);
            }
                                            
            urlContent
=is.toString();
        }

    
catch(Exception e)
    
    
...
        System.out.println(
"网址文件未能输出");
        e.printStackTrace();
    }

        
        
    }

     
    
    
//获得网址所在的匹配区域部分
    public void getContentArea()
    
...{
         
int pos1=0,pos2=0;
         pos1
= urlContent.indexOf(strAreaBegin)+strAreaBegin.length();
         pos2
=urlContent.indexOf(strAreaEnd,pos1);
         ContentArea
=urlContent.substring(pos1,pos2); 
    }

    
    
//以下两个函数获得网址应该要包含的关键字及不能包含的关键字
    
//这里只做初步的实验。后期,保护的关键字及不能包含的关键字应该是不只一个的。
    public void getStringInUrl(String stringInUrl)
    
...{
         
this.stringInUrl=stringInUrl;        
          
    }

    
    
public void getStringNotInUrl(String stringNotInUrl)
    
...{
        
this.stringNotInUrl=stringNotInUrl;
    }

    
    
//获取采集规则
    
    
//获取url网址
    public void getUrl()
    
...{
     
    }

    
    
public String getRegex()
    
...{
        
return regex;
        
    }

    
    
class UrlAndTitle
    
...{
        String myURL;
        String title;
    }

}

转载于:https://www.cnblogs.com/zuzwn/p/3614978.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习烂到留级,却凭着正经发表的第一篇论文,优雅斩获诺贝尔奖

全世界只有3.14 %的人关注了青少年数学之旅照片里的男人&#xff0c;得意但很谦逊&#xff0c;他是诺贝尔化学奖创设以来最年轻得主——田中耕一。诺贝尔奖通知的那一天 叮铃叮铃叮铃......正在加班的田中耕一掏出手机&#xff0c;这是一个陌生的跨洋电话。电话那头的外国人…

CakePHP Pagination (分頁功能) 加入自己的參數

如果還不知道什麼是 Pagination 或者還不了解如何使用&#xff0c;請參考&#xff1a; CakePHP Pagination (分頁功能) 。通常在管理後台實作時&#xff0c;常設定許多查詢條件來查詢資料&#xff0c;比如&#xff1a;起始、結束時間。通常這些參數都是用GET的方式在傳遞。以下…

基于事件驱动架构构建微服务第2部分:领域对象和业务规则

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part2-domain-objects-and-business-rules/在本文中&#xff0c;我将实现领域模型&#xff1a;EduSync.Speech.Domain这是包含核心域的最内层。它包含我们的领域对象和业…

qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器

qt判断tcp客户端是否连接服务器 内容精选换一换本章节指导您使用MongoDB客户端&#xff0c;通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景&#xff1a;弹性云服务器的操作系统以Linux为例&#xff0c;客户端本地使用的计算机系统以Windows为例。目…

谈谈为什么我们需要云原生架构?

未来的软件&#xff0c;从诞生起&#xff0c;就是生在云上&#xff0c;长在云上的。这个说法绝对不是没有根据的&#xff0c;看看现在的互联网大厂在做的事情&#xff0c;你就知道了&#xff1a;阿里宣布成立云原生技术委员会&#xff0c;并投入数十亿大力推动阿里经济体全面云…

服务器系统设计方案,服务器集群方案设计

当前主流的集群方式包括以下几种&#xff1a;1.服务器主备集群方式服务器主-备方式由一台服务器在正常运行状态提供对外服务&#xff0c;其它集群节点作为备份机&#xff0c;备份机在正常状态下不接受外部的应用请求&#xff0c;实时对生产机进行检测&#xff0c;当生产机停机时…

快别发语音了! | 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源千叶的堕天使绅士猫_呜喵0w0&#xff0c;侵权删&#xff09;我们无论遇到什么困难&#xff0c;都不要怕&#xff0c;微笑着面对它&#xff01;消除恐惧的最好方法就是面对恐惧&#xff01;

软件项目管理概览----版本控制

随着软件项目规模的不断扩大&#xff0c;项目管理的作用变得越来越重要。如果一个需要长期维护的项目不能得到很好的管理与控制&#xff0c;“软件腐败”就会发生&#xff0c;用不了多久&#xff0c;我们的程序可能就会像一团拌好的炸酱面一样难以找到头绪&#xff0c;维护的成…

设计模式之原型

原型模式介绍完整拷贝原型模式主要解决的问题就是创建重复对象&#xff0c;而这部分对象内容本身比较复杂&#xff0c;生成过程可能从库或者RPC接口中获取数据的耗时较长&#xff0c;因此采用克隆的方式节省时间。原型模式是一种创建型设计模式&#xff0c;使你能够复制已有对象…

华为服务器停止响应,windows服务器停止工作

windows服务器停止工作 内容精选换一换无法通过远程桌面连接裸金属服务器时&#xff0c;我们推荐您按照以下思路排查问题。检查是否符合登录条件检查网络是否正常检查防火墙配置是否正常远程访问端口配置异常尝试重启裸金属服务器确认是否已经按照裸金属服务器登录前的准备工作…

专题1.1——Exchange2013部署前准备条件

本专题将主要介绍Exchange2013从部署前准备、正式部署到应用配置和维护的整个过程。博文是我在自己做测试的过程中自己编写的&#xff0c;如果大家有什么意见或问题也欢迎一起讨论交流。废话不多说&#xff0c;下面进入正题。本节将主要介绍部署Exchange2013之前需要准备的先决…

这些让人看瞎了的设计!实力证明,数学才是世界的最终boss!

全世界只有3.14 %的人关注了青少年数学之旅昨天小天刷微博&#xff0c;看到了一组动图&#xff0c;一时间我都不知道是我的眼睛出了错&#xff0c;还是我的大脑反应不过来。奇了怪了&#xff01;怎么箭头反转了180后&#xff0c;还是原样&#xff01;问题到底出在哪里&#xff…

你真的了解低代码平台吗?

从 2020 年疫情之后&#xff0c;低代码这个概念就突然变得火热起来&#xff0c;各大自媒体纷纷推出介绍低代码的文章&#xff0c;InfoQ 也曾发表过一篇《为什么我说低代码是“行业毒瘤”&#xff1f;》引发了热议&#xff0c;明道的创始人任向晖随后在自己的公众号写文章《低代…

图像还可以这样玩!如何用OpenCV处理图像?

全世界只有3.14 % 的人关注了青少年数学之旅人工智能近年来呈现爆发式发展&#xff0c;计算机视觉和深度学习作为人工智能的两大支柱学科&#xff0c;近年来得到迅速发展。今天小天将带着大家走进计算机视觉&#xff01;所谓计算机视觉&#xff0c;就是指用摄影机和电脑代替人眼…

java集合学习笔记 ---Collections类对集合的处理

2019独角兽企业重金招聘Python工程师标准>>> 包名:java.util.CollectionsCollections是个类&#xff0c;不是接口有以下方法&#xff0c;部分列举1.对List进行升序排序public static void sort(List list)如果要进行降序排序,可以在sort函数中制定降序public static…

如何入门.NET Core ? 推荐这10个优秀的开源项目!

.NET 5马上就要发布了&#xff0c;还不知道这些.NET Core开源项目&#xff1f;只推荐干货&#xff01;当然这些开源项目都是个人或组织开发的。1.Ant Design Blazor.NET进行客户端Web开发又一利器。微软官方认可&#xff0c;微软Build2020开发者大会Blazor介绍中&#xff0c;提…

.NET设计模式(7):创建型模式专题总结(Creational Pattern)

概述 创建型模式&#xff0c;就是用来创建对象的模式&#xff0c;抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较&#xff0c;通过一个游戏开发场景的例子来说该如何使用创建型模式。 为什么需要创建型模式 所…

ABP Vnext 4.4:统一Ef Core的DbContext/移除EF Core Migrations项目

Abp vnext 4.4出现了一个比较重大的变更&#xff1a;在Startup template中移除了EF Core Migrations项目&#xff0c;本文翻译自community.abp.io/articl由于本文发布的时候Abp vnext的版本还没有到4.4&#xff0c;所以本文演示了如何从4.4以前的版本移除EntityFrameworkCore.D…

史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......

全世界只有3.14 %的人关注了青少年数学之旅今天超模君想问大家一个问题&#xff1a;如果在撒哈拉大沙漠或者是西伯利亚上建造一个大型装置&#xff0c;以便向地球之外的其他星球的朋友们表明地球上存在有智慧的生命&#xff0c;最适当的装置是什么呢&#xff1f;勾股定理&#…

C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并

C#操作Excel文件(读取Excel&#xff0c;写入Excel) 看到论坛里面不断有人提问关于读取excel和导入excel的相关问题。闲暇时间将我所知道的对excel的操作加以总结&#xff0c;现在共享大家&#xff0c;希望给大家能够给大家带了一定的帮助。另外我们还要注意一些简单的问题1.exc…