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,一经查实,立即删除!

相关文章

戴尔服务器远程管理卡端口修改,dell服务器远程管理卡的配置和应用(10页)-原创力文档...

DELL服务器远程管理卡的配置和应用适用于DELL PowerEdge 2950及以上机型目标一&#xff1a;停电或者断电后&#xff0c;通电自动启动设置方法&#xff1a;开机按F2键&#xff0c;在CMOS中找到AC Power Recovery "选项设置为 ON ”。意思说 把服务器的开机选项设置为一通电…

用IStateManager管理状态

/Files/nanshouyong326/CumstomControlIstaeManager.rar 还有Bug就是不能用VS的设计器Html方式声明控件&#xff0c;郁闷&#xff01;

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

全世界只有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这是包含核心域的最内层。它包含我们的领域对象和业…

/etc/sudoers中的含义

Sudo 是允许系统管理员让普通用户执行一些或者全部的root 命令的一个工具&#xff0c;如halt&#xff0c;reboot&#xff0c;su 等等。这样不仅减少了root 用户的登陆 和管理时间&#xff0c;同样也提高了安全性。Sudo 不是对shell 的一个代替&#xff0c;它是面向每个命令的。…

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

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

asp版新闻发布今日弄好

感谢组长帮忙弄好了新闻发布的删除功能&#xff0c;组长自己那么多事&#xff0c;而且又是凌晨二点&#xff0c;仍过来帮我解决问题。太感激了。。。。最近特别忙&#xff0c;也让我多了些怨天尤人的感慨。其实还是自己的原因&#xff0c;如果我能力足够强的话&#xff0c;会轻…

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

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

用SQL Server Compact Edition创建移动应用程序 【转载】

本文转载自 http://www.bccn.net/Article/sjk/sqlserver/jszl/200709/6545.html 这个文档比较完整地介绍了在移动开发中&#xff0c;如何实现对SQL Server数据库的合并订阅。收藏一下先&#xff0c;在用的时候仔细看一下即可。转载于:https://www.cnblogs.com/chenxizhang/arch…

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

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

第2天.make的学习(第二部分)对伪目标的理解

一、目标&#xff0c;依赖&#xff0c;命令也许大家觉得这个不重要&#xff0c;但今天我有了新的认识&#xff0c;所以写了下来。这三个就是Makefile的全部&#xff0c;但今天我要重点说一下它的执行顺序。每个Makefile都有且只有一个终极目标&#xff0c;下设若干子目标&#…

ASP.NET(c#)常用类函数

常用函数系列: public static string Get_ClientIP() 得到客户端IP public static string Get_CMac(string IP) 得到客户端 CMac 地址 public static string RequestF(string xPName,string xPType,int xLenDef) 安全接收数据系列 public static string Show_Cont(string xStr)…

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

全世界只有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之前需要准备的先决…

Tabs

Tabs控件的功能是在一个页面上显示多个选项卡。由两部分组成&#xff1a;TabContainer和TabPanel.前者表示整个一组选项卡&#xff0c;而后者表示其中的一个选项卡。 属性列表&#xff1a; OnClientActiveTabChanged:单击选项卡标题触发的事件 Height:选项卡的高度 ContentTemp…

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

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