简单网络爬虫实现<爬取网页邮箱>
转载自http://blog.csdn.net/u013616976/article/details/20620017
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
——————————————————————————————————————————————————
百度上随便找一个网页,又想多的最好,这次以 点击打开链接 这个贴吧网页为例进行说明
从图片和网页可见上面有许多邮箱,我粗略看了看十几页大概有几百个吧,如果你是楼主你肯定很难办,你要是一个一个发吧太多了工作量太大了,一个一个邮箱的复制真的会累死人的。可是,如果你不发,肯定会被吧友鄙视。
怎么办呢?当然,如果有一个工具能过自动识别网页上的邮箱并将它们取出来那该多好啊……
他就是网页爬虫,可是按照一定的规则抓取网页数据,(像什么百度,谷歌 做SEO 大多是网页数据的抓取与分析)并将这些数据保存起来,方便数据的处理和使用。
废话太多,上教程‘。
—————————————————————————————————————————————————
思路分析:
1.要想获取网页的数据必须取得与网页的链接
2.要想获得网页上的邮箱地址必须由获得邮箱地址相应的规则
3.要想把数据去除必须由取得数据相关类的操作
4.要想保存数据必须实现保存数据的操作
—————————————————————————————————————————————————
接下来上代码。
- package tool;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.InputStreamReader;
- import java.io.Writer;
- import java.net.URL;
- import java.net.URLConnection;
- import java.sql.Time;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Demo {
- public static void main(String[] args) throws Exception {// 本程序内部异常过多为了简便,不一Try,直接抛给虚拟机
- Long StartTime = System.currentTimeMillis();
- System.out.println("-- 欢迎使用飞扬简易网页爬虫程序 --");
- System.out.println("");
- System.out.println("--请输入正确的网址如http://www.baidu.com--");
- Scanner input = new Scanner(System.in);// 实例化键盘输入类
- String webaddress = input.next();// 创建输入对象
- File file = new File("D:" + File.separator + "test.txt");// 实例化文件类对象
- // 并指明输出地址和输出文件名
- Writer outWriter = new FileWriter(file);// 实例化outWriter类
- URL url = new URL(webaddress);// 实例化URL类。
- URLConnection conn = url.openConnection();// 取得链接
- BufferedReader buff = new BufferedReader(new InputStreamReader(
- conn.getInputStream()));// 取得网页数据
- String line = null;
- int i=0;
- String regex = "\\[email protected]\\w+(\\.\\w+)+";// 声明正则,提取网页前提
- Pattern p = Pattern.compile(regex);// 为patttern实例化
- outWriter.write("该网页中所包含的的邮箱如下所示:\r\n");
- while ((line = buff.readLine()) != null) {
- Matcher m = p.matcher(line);// 进行匹配
- while (m.find()) {
- i++;
- outWriter.write(m.group() + ";\r\n");// 将匹配的字符输入到目标文件
- }
- }
- Long StopTime = System.currentTimeMillis();
- String UseTime=(StopTime-StartTime)+"";
- outWriter.write("--------------------------------------------------------\r\n");
- outWriter.write("本次爬取页面地址:"+webaddress+"\r\n");
- outWriter.write("爬取用时:"+UseTime+"毫秒\r\n");
- outWriter.write("本次共得到邮箱:"+i+"条\r\n");
- outWriter.write("****谢谢您的使用****\r\n");
- outWriter.write("--------------------------------------------------------");
- outWriter.close();// 关闭文件输出操作
- System.out.println(" —————————————————————\t");
- System.out.println("|页面爬取成功,请到D盘根目录下查看test文档|\t");
- System.out.println("| |");
- System.out.println("|如需重新爬取,请再次执行程序,谢谢您的使用|\t");
- System.out.println(" —————————————————————\t");
- }
- }
代码如上,每一行都有注释,实在看不懂的可以联系我。
直接在命令行下编译-->运行
输入爬去取页面的地址。
打开D盘目录找到test.xt文件.
文件内的邮箱默认加上了“;”方便大家发送操作
当然,爬取本地文件内的数据就更简单了
不再过多解释直接上代码。
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Demo0 {
- public static void main(String[] args)throws Exception {
- BufferedReader buff=new BufferedReader(new FileReader("D:"+File.separator+"test.txt"));
- String line=null;
- String regex="\\[email protected]\\w+(\\.\\w+)+";
- Pattern p=Pattern.compile(regex);
- while ((line=buff.readLine())!= null) {
- Matcher m=p.matcher(line);
- while (m.find()) {
- System.out.println(m.group()+";");
- }
- }
- }
- }