网页爬虫




/*
网页爬虫
如果要在程序中使用正则表达式,则必须依靠 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();

}

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值