Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 700|回复: 0

java获取网页所有网址和链接文字

[复制链接]

该用户从未签到

发表于 2011-9-19 15:59:34 | 显示全部楼层 |阅读模式
/ 通过指定URL,获取网页上所有的“链接URL”和“链接文字”。

package catch_url;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Urls {
private String startUrl; // 开始采集网址

String urlContent;

String ContentArea;

private String strAreaBegin, strAreaEnd; // 采集区域开始采集字符串和结束采集字符串

@SuppressWarnings("unused")
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.126.com/");
  myurl.getUrlContent();
  myurl.getContentArea();
  myurl.getStringInUrl("http://www.126.com/");
  myurl.getStringNotInUrl("Google");
  myurl.Urls();

}

// 初始化构造函数 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>]$";
  final String regex = "<a.*?/a>";
  // String regex ="http://.*?>";
  final Pattern pt = Pattern.compile(regex);
  final Matcher mt = pt.matcher(ContentArea);
  while (mt.find()) {
   System.out.println(mt.group());
   i++;

   // 获取标题
   final Matcher title = Pattern.compile(">.*?</a>").matcher(mt.group());
   while (title.find()) {
    System.out.println("标题:"
      + title.group().replaceAll(">|</a>", ""));
   }

   // 获取网址
   final 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;
}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-6-26 16:36 , Processed in 0.365910 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表