最近在回顾正则表达式,正好想起一个比较有意思的小程序:爬虫。
爬虫,百度百科是这样说的:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
现在有这样一个需求:获取指定数据文本文件或网页上的所有邮箱地址
下面我们用代码实现一下:
首先,我们准备了这样的一份本地数据:mail.txt
wefdvavxzfaf zhangsan@sina.com farefavdareraweqaee2 sdfdsaa yanping@163.com adf sdfae WEFEW fae
下面是代码实现:
package com.shindo.java.regex; import java.io.*; import java.net.*; import java.util.regex.*; /** * 网页爬虫(蜘蛛) * 需求:获取指定数据文本文件或网页上的所有邮箱地址 */ public class WebCrawler { public static void main(String[] args)throws Exception{ getMails(); // getMials_1(); } /* * 读取本地文本文件,获取其中所有邮箱地址 */ public static void getMails()throws Exception{ //读取本地文件 BufferedReader buf = new BufferedReader(new FileReader("F:\mail.txt")); String line = null; //定义邮箱的正则表达式 String mailreg = "\w+@\w+(\.\w+)+"; //将mailreg转换为Pattern对象 Pattern p = Pattern.compile(mailreg); //一行行读取 while((line = buf.readLine())!= null ){ Matcher m = p.matcher(line);//对每一行进行匹配 while(m.find()){ System.out.println(m.group());//取数据 } } } /** * 对网页中的数据进行筛选,爬出所有邮箱地址 */ public static void getMials_1()throws Exception{ //获取网页链接 URL url = new URL("网页地址"); 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); while((line = bufIn.readLine()) != null){ Matcher m = p.matcher(line); while(m.find()){ System.out.println(m.group()); } } } }
运行结果: