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;
        }
    }
}

程序主界面图:

目录
相关文章
|
2月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
206 7
|
2月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
29天前
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
家政系统源码,java版本
|
12天前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
69 3
|
1月前
|
供应链 JavaScript 前端开发
Java基于SaaS模式多租户ERP系统源码
ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业的运营效率和管理水平,它是一种先进的企业管理理念和信息化管理系统。 适用于小微企业的 SaaS模式多租户ERP管理系统, 采用最新的技术栈开发, 让企业简单上云。专注于小微企业的应用需求,如企业基本的进销存、询价,报价, 采购、销售、MRP生产制造、品质管理、仓库库存管理、财务应收付款, OA办公单据、CRM等。
127 23
|
2月前
|
Java
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
本文深入解析了ConcurrentHashMap的实现原理,涵盖JDK 7与JDK 8的区别、静态代码块、构造方法、put/get/remove核心方法等。JDK 8通过Node数组+链表/红黑树结构优化并发性能,采用CAS和synchronized实现高效锁机制。文章还详细讲解了hash计算、表初始化、扩容协助及计数更新等关键环节,帮助读者全面掌握ConcurrentHashMap的工作机制。
81 6
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
|
2月前
|
Java 关系型数据库 MySQL
Java汽车租赁系统源码(含数据库脚本)
Java汽车租赁系统源码(含数据库脚本)
50 4
|
网络协议 Java API
|
缓存 网络协议 Java