/*
网页爬虫
如果要在程序中使用正则表达式,则必须依靠 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(); } } }
网页爬虫
最新推荐文章于 2024-07-30 15:54:01 发布