`
fly931
  • 浏览: 8016 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java获取网页源代码中得所有链接 正则表达式法[zz]

阅读更多
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; // 采集区域开始采集字符串和结束采集字符串


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;
}
}
 
分享到:
评论

相关推荐

    JS使用正则表达式获取小括号、中括号及花括号内容的方法示例

    在JavaScript编程中,正则表达式是处理字符串的强大工具,尤其在处理文本中的特定模式时。本示例探讨了如何使用正则表达式来提取字符串中小括号 `()`、中括号 `[]` 和花括号 `{}` 内的内容。这对于解析包含结构化...

    基于Java代码的USB摄像头采集与显示

    JNI允许Java代码调用本地(C/C++)库,而libusb4java则提供了Java接口来操作USB设备,包括摄像头。 在USB摄像头采集过程中,我们需要识别并连接到USB摄像头设备。这通常涉及枚举USB总线上的设备,找到符合特定供应...

    提取alert提示框和按钮等中html元素中得文字工具

    如果这个工具能够从alert中提取文字,那么它可能通过解析JavaScript代码或者模拟用户行为来实现这一功能,这对于测试和调试JavaScript代码时获取提示信息非常有用。 描述中的“这个工具比较有意思”暗示了该工具...

    java读取Excel中得数据

    代码是借助于apathe的poi.jar实现得读取excel内得数据,所以在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可。路径可以自行修改成绝对路径,一共需要用到得几个jar,都放在文件夹里面。

    java实现替换文件中得特定字符串

    自己写的一个小工具,用以替换文件中得某些特定字符串,可以是文件夹中得也可以是直接文件。希望对您有所帮助

    java编程中得一些快捷键

    在Java编程中,掌握一些常用的快捷键能够极大地提高开发效率,减少无谓的手动输入时间。以下是一些在Java编程中常见的快捷键及其用途: 1. `main Alt+/`: 这个快捷键可以帮助你快速生成`main`函数的模板。在输入`...

    Java解析XML.zip

    通过Jaxen,开发者可以轻松地在Java程序中执行XPath查询,获取XML文档中的特定信息,或者根据查询结果进行操作。 结合这两个库,Java开发者可以在处理XML时享受到便利。DOM4J提供了对XML的全面操作,而JAXEN则确保...

    爱限免源代码

    //获取小字典中得内容 NSString * controllerNameStr = [smallDic objectForKey:@"controllerName"]; //将字符串转化为类名 Class controllerNameClass = NSClassFromString(controllerNameStr); //...

    Java 3D魔方游戏源码及中文注释包.7z

    Java 3D魔方游戏源码及中文注释包是一个非常适合初学者和进阶开发者学习的资源,它提供了实现3D魔方游戏的完整代码,同时包含详细的中文注释,帮助理解每一部分的功能和实现原理。这个源码包涵盖了多个Java编程和3D...

    matlab计算器源代码

    利用MATLAB GUI设计实现一个图形用户界面的计算器程序。 1.具有友好的用户图形界面。...3.能够保存上次历史计算的答案,先是答案存储器中得内容。 4.有清除键,能清除操作,并对不正确的表达式能指出其错误原因。

    红宝书OpenGL编程指南源代码(VC6++)

    整本书中得源代码,而且都是VC++中能够运行的存在。

    深入分析 Java 中的中文编码问题

    在Java编程中,中文编码问题是一个常见的挑战,尤其是在处理文本输入、输出以及网络通信时。本文将深入探讨Java中的中文编码问题,以及如何有效地解决这些问题。 首先,我们要了解字符编码的基本概念。字符编码是...

    java中得泛型

    ### Java中的泛型 #### 泛型的概念与作用 Java中的泛型是一种强大的类型安全机制,它允许开发者在编译时指定类型参数,从而避免了运行时类型转换错误,并提高了代码的复用性和可维护性。简单来说,泛型允许我们在...

    消除验证码上的干扰(java源码)

    消除验证码上的干扰,抛砖引玉,大家见笑。

    对DataTable分页获取数据

    ### 对DataTable进行分页获取数据的方法解析 在处理大量数据时,为了提高用户体验及系统性能,通常会采用分页技术来展示数据。本篇文章将详细解释如何针对`DataTable`对象实现分页功能,并通过示例代码来具体说明其...

    delphi得到excel数据中得行数和列数

    在你的源代码文件顶部添加`uses ComObj;`。 2. **创建Excel应用实例**: 使用`CreateOleObject`函数来创建一个Excel应用程序对象。例如: ```delphi var ExcelApp: Variant; begin ExcelApp := ...

    一个模拟Windows的画图程序 java版

    这是一个模拟windows画图程序的简单的程序,可以实现画线、画椭圆、画矩形、保存、打开文件等操作,是用java编写的。

    基于层次分析法在学院综合楼安全评价中得应用.docx

    《基于层次分析法在学院综合楼安全评价中的应用》这篇毕业论文主要探讨了如何运用层次分析法(AHP)对学院综合楼的安全状况进行全面且有效的评价。层次分析法是一种结合定性和定量分析的决策工具,特别适合处理涉及多...

    提取ts流中得iframe

    标题中的“提取ts流中得iframe”指的是在数字电视传输中如何从Transport Stream (TS) 流中解析并提取出I帧(Instantaneous Decoding Picture)的过程。在视频编码和解码领域,I帧是非常重要的,因为它能独立解码,不...

Global site tag (gtag.js) - Google Analytics