Java---网络蜘蛛-网页邮箱抓取器~源码

简介: 刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~给一个带协议的网站~然后深入网页中查找邮箱~因为博主知识有限~线程池目前还没...

刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~
自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~

给一个带协议的网站~然后深入网页中查找邮箱~

因为博主知识有限~线程池目前还没有学~导致无法控制线程~~~见谅~
还有~就是没有设置停止按钮~也是因为没学线程池~水平不够啊~
只能关闭软件来停止程序~

package cn.hncu.bs;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

import cn.hncu.thread.RunThread;
import cn.hncu.threadPool.ThreadPool;

/**
 * 
 * @author 陈浩翔
 * @version 1.0  2016-5-12
 */
public class SpiderUi extends javax.swing.JFrame {
    private String path = SpiderUi.class.getClassLoader().getResource("./").getPath();

    public SpiderUi() {
        super("网络蜘蛛1.0-陈浩翔版权所有!");
        initComponents();

    }

    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdUrl = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfdTime = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        btnRun = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(400, 400));
        getContentPane().setLayout(null);

        jLabel1.setFont(new java.awt.Font("Dialog", 1, 24));
        jLabel1.setForeground(new java.awt.Color(255, 0, 51));
        jLabel1.setText("\u7f51\u7edc\u8718\u86db-\u7f51\u9875\u90ae\u7bb1\u6293\u53d6\u56681.0");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(30, 20, 350, 70);

        jLabel2.setFont(new java.awt.Font("Dialog", 1, 14));
        jLabel2.setText("\u9012\u5f52\u6df1\u5165\u5c42\u6570:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(20, 190, 110, 30);

        tfdUrl.setFont(new java.awt.Font("Dialog", 1, 12));
        getContentPane().add(tfdUrl);
        tfdUrl.setBounds(20, 140, 350, 30);

        jLabel3.setFont(new java.awt.Font("Dialog", 1, 14));
        jLabel3.setText("\u8d77\u59cbURL:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(20, 100, 70, 30);

        tfdTime.setFont(new java.awt.Font("Dialog", 1, 14));
        getContentPane().add(tfdTime);
        tfdTime.setBounds(20, 230, 60, 30);

        jLabel4.setFont(new java.awt.Font("Dialog", 0, 11));
        jLabel4.setText("\u5373\u641c\u7d22\u7f51\u9875\u90ae\u7bb1\u65f6,\u641c\u7d22\u6df1\u5165\u7684\u5c42\u6570,\u5efa\u8bae200\u5de6\u53f3");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(90, 230, 250, 30);

        btnRun.setFont(new java.awt.Font("Dialog", 1, 18));
        btnRun.setForeground(new java.awt.Color(0, 51, 255));
        btnRun.setText("\u5f00\u59cb\u6293\u53d6");
        btnRun.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRunActionPerformed(evt);
            }
        });
        getContentPane().add(btnRun);
        btnRun.setBounds(40, 300, 110, 50);

        jButton1.setFont(new java.awt.Font("Dialog", 1, 18));
        jButton1.setForeground(new java.awt.Color(0, 51, 255));
        jButton1.setText("\u5e2e\u52a9");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(230, 300, 120, 50);


    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        JOptionPane.showMessageDialog(this, "抓取的邮箱存储在"+path+"/crawlingFile/mail.txt文件中\r\nURL存储在"+path+"/crawlingFile/http.txt文件中");
    }

    private void btnRunActionPerformed(java.awt.event.ActionEvent evt) {
        int time;
        try {
            time = Integer.parseInt(tfdTime.getText());
        } catch (NumberFormatException e1) {
            JOptionPane.showMessageDialog(this, "输入的层数格式错误!应该为整数!");
            return;
        }

        try {
            String inet = tfdUrl.getText();

            URL url = new URL(inet);

            File file = new File(path);
            if (!file.exists()) {
                file.mkdir();
            }

            DataOutputStream dout = new DataOutputStream(
                    new BufferedOutputStream(new FileOutputStream(
                            path+"/crawlingFile/mail.txt", true)));
            DataOutputStream doutHttp = new DataOutputStream(
                    new BufferedOutputStream(new FileOutputStream(
                            path+"/crawlingFile/http.txt", true)));

            System.out.println(url+","+time+","+dout+","+doutHttp);

//            RunThread run = ThreadPool.getRunThread(url, time, dout, doutHttp, path);
//            run.start();

            new RunThread(url, time, dout, doutHttp,path).start();
            //System.out.println("主线程线程读取完!");

        } catch (MalformedURLException e) {
            JOptionPane.showMessageDialog(this, "请输入正确的URL地址!!");
            return;
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "请输入正确的URL地址!!");
            return;
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SpiderUi().setVisible(true);
            }
        });
    }

    private javax.swing.JButton btnRun;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JTextField tfdTime;
    private javax.swing.JTextField tfdUrl;
}

package cn.hncu.thread;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.hncu.threadPool.ThreadPool;


public class RunThread extends Thread{
    private static long num=0;
    private URL url = null;
    private int time = 0;
    private DataOutputStream dout = null;
    private DataOutputStream doutHttp = null;
    private String path = null;

    public RunThread() {
    }

    public RunThread(URL url, int time, DataOutputStream dout,
            DataOutputStream doutHttp,String path) {
        num++;
        this.url = url;
        this.time = time;
        this.dout = dout;
        this.doutHttp = doutHttp;
        this.path = path;
    }

    @Override
    public void run() {
        try {
            if (time == 0) {
                return;
            }
            BufferedReader br = new BufferedReader(new InputStreamReader(

            url.openStream()));
            String regex = "\\w+@\\w+(\\.\\w+)+";

            Pattern p = Pattern.compile(regex);

            Pattern pUrl = Pattern
                    .compile("http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?");

            String line = null;
            while ((line = br.readLine()) != null) {
                Matcher m = p.matcher(line);

                Matcher mUrl = pUrl.matcher(line);
                while (mUrl.find()) {
                    try {
                        BufferedReader br2 = new BufferedReader(
                                new InputStreamReader(new FileInputStream(
                                        path+"/crawlingFile/http.txt")) );
                        String s = null;
                        boolean is = false;
                        while ((s = br2.readLine()) != null) {
                            if (s.equals(mUrl.group())) {
                                is = true;
                                break;
                            }
                        }
                        if (is) {
                            continue;
                        }
                        if (mUrl.group().endsWith("jpg")) {
                            continue;
                        }
                        if (mUrl.group().endsWith("png")) {
                            continue;
                        }

                        //输出网页地址
                        System.out.println(mUrl.group());

                        doutHttp.writeBytes(mUrl.group() + "\r\n");
                        doutHttp.flush();//流刷新缓存

//                        RunThread run = ThreadPool.getRunThread(url, time, dout, doutHttp, path);
//                        run.start();

                        new RunThread(new URL(mUrl.group()), time--,dout, doutHttp,path).start();

                        //creat(mUrl.group(), new URL(mUrl.group()),time--, dout,doutHttp);
                    } catch (Exception e) {
                        //System.out.println("URL错误");
                        return;
                    }
                }

                while (m.find()) {
                    BufferedReader br2 = new BufferedReader(new InputStreamReader(new FileInputStream(path+"/crawlingFile/mail.txt")));
                    String s = null;
                    boolean is = false;

                    while ((s = br2.readLine()) != null) {
                        if (s.equals(m.group())) {
                            is = true;
                            break;
                        }
                    }

                    if (is) {
                        continue;

                    }
                    dout.writeBytes(m.group() + "\r\n");
                    dout.flush();

                    //输出邮箱
                    System.out.println(m.group());

                }

            }

            System.out.println(num+"个程线程读取完!");
        } catch (FileNotFoundException e) {
            //System.out.println("文件错误");
            return;
        } catch (IOException e) {
            //System.out.println("URL异常");
            return;
        }
    }
}

程序主界面图:

目录
相关文章
|
3天前
|
Java 数据挖掘 开发者
Java网络编程进阶:Socket通信的高级特性与应用
【6月更文挑战第21天】Java Socket通信是分布式应用的基础,涉及高级特性如多路复用(Selector)和零拷贝,提升效率与响应速度。结合NIO和AIO,适用于高并发场景如游戏服务器和实时数据分析。示例展示了基于NIO的多路复用服务器实现。随着技术发展,WebSockets、HTTP/2、QUIC等新协议正变革网络通信,掌握Socket高级特性为应对未来挑战准备。
|
3天前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
11 1
|
6天前
|
Java Linux 测试技术
Java sdk连接fabric网络的谜之报错
Java sdk连接fabric网络的谜之报错
12 0
|
2天前
|
数据采集 Java 开发者
JAVA网络编程深度探索:URL与URLConnection的精湛技艺
Java网络编程核心在于URL和URLConnection。URL是资源的唯一标识,用于定位网络资源,支持解析、编码解码及参数操作。URLConnection则实现数据交换,允许GET/POST请求,可定制请求头、设置超时,是网络交互的关键。两者结合,适用于网络爬虫等场景,深入学习能提升编程技巧并揭示网络编程奥秘。
|
2天前
|
XML JSON 搜索推荐
【高手过招】JAVA网络编程对决:URL与URLConnection的高级玩法,你敢挑战吗?
【6月更文挑战第22天】在Java网络编程中,URL与URLConnection是核心工具,高手利用它们进行高级操作。从定制请求头(如User-Agent和Authorization)以适应不同场景,到利用POST请求发送复杂数据,甚至是通过设置代理(HTTP或SOCKS)穿越网络障碍,以及运用异步处理和流操作提升效率,每个技巧都是提升网络交互的关键。通过深入学习和实践,开发者可以在网络编程领域不断提升,应对各种挑战。
|
1天前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
8 3
|
2天前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【6月更文挑战第22天】Java网络编程中,URL是资源定位器,用于解析和创建网络地址;URLConnection接口负责建立到URL资源的连接。示例展示了如何使用URL类获取协议、主机、端口和路径,以及如何通过HttpURLConnection进行GET/POST请求,设置超时并处理响应。思维导图概述了从创建URL到设置请求属性、发送请求及处理响应的完整流程,帮助理解两者在网络编程中的作用。
|
2天前
|
缓存 安全 Java
【技术前沿】JAVA网络编程黑科技:URL与URLConnection的创新应用,带你飞越极限!
【6月更文挑战第22天】Java的URL和URLConnection在现代网络编程中扮演关键角色,不仅用于基本HTTP请求,还在微服务(弹性自动化调用)、智能缓存策略、异步处理和安全增强方面展现创新应用。例如,它们支持动态服务发现、HTTP缓存控制、非阻塞I/O和HTTPS加密,助力开发者构建高效、安全的网络解决方案。通过掌握这些技术,可以提升项目性能,应对云计算和大数据时代的挑战。
|
2天前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【6月更文挑战第22天】在Java网络编程中,理解和运用URL与URLConnection是关键。URL代表统一资源定位符,用于标识网络资源;URLConnection则用于建立与URL指定资源的连接。通过构造URL对象并调用openConnection()可创建URLConnection。示例展示了如何发送GET请求读取响应,以及如何设置POST请求以发送数据。GET将参数置于URL,POST将参数置于请求体。练习这些基本操作有助于提升网络编程技能。
|
2天前
|
安全 Java 网络安全
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
【6月更文挑战第22天】JAVA网络编程中,URL代表统一资源定位符,用于表示网络资源地址。通过`new URL("address")`创建URL对象,可解析和访问其组件。URLConnection是与URL建立连接的接口,用于定制HTTP请求,如设置GET/POST、超时及交换数据。

热门文章

最新文章