您的位置:首页 > 其它

网页爬虫

2013-04-21 17:16 120 查看
/*

网页爬虫

如果要在程序中使用正则表达式,则必须依靠Pettern类和Matcher类,

这两个类都在java.util.regex保重定义。

Pettern类的主要作用是进行正则规范的编写,而Matcher类主要执行规范,校验一个字符串是否符合规范

Pettern类中的正则规范

"\w"表示字母、数字、下划线

程序中的"\"字符需要转义,所以"\\"实际上是表示的"\"

"+"表示一位或多位

Pettern类中的常用方法

public static Pattern compile(String regex) //指定正则表达式规则

public Matcher matcher(CharSequence input) //返回Matcher类实例

public String[] split(CharSequence input) //字符串拆分

Matcher类常用的方法

public boolean matches() //执行验证

public String replace(String replacement) //字符串替换

BufferedReader类

BufferedReader类用于从缓冲区读取内容,所有输入的字节数据都将放在缓冲区中

BufferedReader类中的常用方法

public BufferedReader(Reader in) //接收一个Reader类的实例(构造函数)

public String readLine() throws IOException //一次性从缓冲区中将内容全部读取出来

说明:

BufferedReader中定义的构造函数方法只能接收字符输入流的实例

所以有时用字符输入流和字节输入流的转换类InputStreamReader(Reader的子类)

将字节输入流转换为字符输入流

字符流操作时使用了缓冲区,而字节流操作时不使用缓冲区,在开发中字节流使用较为广泛

Reader本身是抽象类,如果要从文件中读取内容,则可以直接使用子类FileReader子类。

FileReader的构造方法如下:

public FileReader(File file) throws FileNoFoundException

说明:

FileReader不直接是Reader的子类而是InputStreamReader的子类

*/

import java.io.*;
import java.util.regex.*;
import java.text.DateFormat;
import java.util.*;
import java.net.*;
public class SpiderDemo
{
    public static File file ;
    public static void main(String args[]) throws Exception
{
    long startTime = System.currentTimeMillis();  //起始时间
    creatFile();
        //getMailFromTxt();
getMailFromURl();
long endTime = System.currentTimeMillis();    //结束时间
System.out.println("总共耗时:" + (endTime-startTime) + "毫秒......");
}
    
//创建TXT文件用于保存邮箱地址
public static void creatFile()
{
    file = new File("G:\\My Java\\Regex\\spiderFile.txt"); //创建对象并给出路径
if(!file.exists())  //判断文件是否存在  
        { 
        try
{
        file.createNewFile();                                 //按照指定路径创建文件
    System.out.println("文件创建成功......");
    }

        catch(IOException e)
{
        e.printStackTrace();
    } 
        }
        else
            System.out.println("文件已存在......");
}

//从TXT文件中获取邮箱地址
public static void getMailFromTxt() throws Exception
{
    BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));
String line = null;

String mailreg = "\\w+@\\w+(\\.\\w+)+";              //定义规则
Pattern p = Pattern.compile(mailreg);                //指定正则表达式规则
while((line = bufr.readLine())!=null)                //从缓冲区中将内容全部读取出来
{
    Matcher m =p.matcher(line);
while(m.find())
{
        System.out.println(m.group());
    }
}
}

//从网页中获取邮箱地址
public static void getMailFromURl() throws Exception
{
    long n = 1849962706;
Writer out = null;
    out = new FileWriter(file,true);
for(;n<2051291221;n++)
{
    URL url = new URL("http://tieba.baidu.com/p/" + n);
URLConnection conn = url.openConnection();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;

String mailreg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(mailreg);
int i = 0;
while((line = bufIn.readLine())!=null)
{
    Matcher m =p.matcher(line);
while(m.find())
{
        System.out.println(m.group());
out.write("NO." + (++i)+ ": " + m.group() + "    ");
    }
}
System.out.println("共获取到 " + i + "个邮箱地址......");
DateFormat df = DateFormat.getDateTimeInstance();  //格式化时间
        System.out.println("当前时间:" + df.format(new Date()) + "......");

out.write("共获取到 " + i + "个邮箱地址......" + df.format(new Date()));

        }

        out.close();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: