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

刚刚学完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;
        }
    }
}

程序主界面图:

时间: 2024-10-02 12:39:58

Java---网络蜘蛛-网页邮箱抓取器~源码的相关文章

维基搜索收购网页的抓取器

中介交易 SEO诊断 淘宝客 云主机 技术大厅 据国外媒体报道,维基百科创始人吉米·威尔斯今年有一个宏大的计划,就是开发开源.开放的搜索引擎维基搜索,这一项目被誉为今年国际互联网的两个黑马产品之一 .周五,威尔斯透露了这一项目的一些进展. 据称,他已经收购了一家拥有抓取技术的公司,另外,维基搜索将依靠成千上万的用户电脑来分布式地抓取网页,而不是构建自己的"蜘蛛"服务器群. 威尔斯表示,他正在把若干个技术模块组建成完整的维基搜索,预计到今年年底,维基搜索将会提供一个公开测试版,这一依靠人

网络爬虫-Jsoup 如何抓取GOOGLE网页数据

问题描述 Jsoup 如何抓取GOOGLE网页数据 网络爬虫新手,以前学过JAVA,所以想用JAVA来做一些数据抓取工作 在网上找的 Jsoup的JAR,试了一下感觉比较容易上手,所以想抓取GOOGLE数据 代码也是网上找的, 但是出现 timeOut,我觉得可能是GOOGLE被屏蔽的问题,我使用Ishadowsock翻墙平时,但是打开以后运货还是timeOut. 不知道各位大神能不能支支招,另外想问一下GOOGLE数据抓取有没有更好一些的开源工具,谢谢万分! Set result = new

java在网页上面抓取邮件地址的方法_java

本文实例讲述了java在网页上面抓取邮件地址的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import java.io.BufferedReader;  import java.io.InputStreamReader;  import java.net.URL;  import java.util.regex.Matcher;  import java.util.regex.Pattern;    public class h1  {     public stati

构建一个高性能的网页抓取器,互联网营销

  互联网的发展,使人类提前进入了信息爆炸的年代,在浩瀚无边的信息海洋里,如何快速.准确找到对自己有用的信息,就成了一个很有价值的研究课题,于是,搜索引擎应运而生.现在,国内外大大小小的搜索引擎有很多,搜搜也是这搜索引擎大军中的一员悍将.笔者有幸参与了搜搜研发过程中的一些工作,在这里写一些自己的理解与看法,权当是抛砖引玉,希望能够得到业内前辈们的一些指点. 对于网页搜索引擎来说,它的基本处理流程,通常可以分为三个步骤:一是对海量互联网网页的抓取,也称下载:二是对已下载的网页进行预处理,包括抽取正

搜索引擎蜘蛛是如何抓取链接的

摘要: 搜索引擎蜘蛛,对于我们来说非常神秘,本文的配图使用蜘蛛侠的原因就在于此.当然我们也不是百度的也不是Google的,所以只能说探秘,而不是揭秘.本文内容比较简单,只是给不知 搜索引擎蜘蛛,对于我们来说非常神秘,本文的配图使用蜘蛛侠的原因就在于此.当然我们也不是百度的也不是Google的,所以只能说探秘,而不是揭秘.本文内容比较简单,只是给不知道的朋友一个分享的途径,高手和牛人请绕行吧. 传统意义上,我们感觉搜索引擎蜘蛛(spider)爬行,应该类似于真正的蜘蛛在蜘蛛网上爬行.也就是比如百度

有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取

本文讲的是有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取,[编者的话]Prerender 服务能够为网络爬虫提供预先渲染的动态页面内容,解决了用 JavaScript 框架构建的 Web 站点不支持爬虫抓取的问题.本文详细描述了一种解决方案,尤其是提供了集成 Prerender 服务的 Docker 容器镜像. 如果你正在使用 AngularJS 构建一个面向大众消费者的应用,你肯定希望用户能把它分享到社交媒体上.对于特定的应用而言,丰富的

编程-如何从网页上抓取我想要的图片?

问题描述 如何从网页上抓取我想要的图片? 例如上面是腾讯搜狗问问个人中心的画面我想要里面的图片可以抓到吗? 解决方案 直接用IE F12,找到图片元素,得到地址,就可以抓.也可以另存为网页,然后在文件夹中找.

页面数据抓取-关于网页表格抓取问题,用什么软件

问题描述 关于网页表格抓取问题,用什么软件 我要抓取的是一个系统内部网页,不能外部访问,数据表格的链接插入有插件.怎么能实现动态抓取??大神啊 解决方案 用抓包的方法最好,然后再分析数据,如果不行,可以考虑用webbrowse这个控件,里面的内容也比较好抓取

网页抓取-ASP.NET网页动态抓取问题

问题描述 ASP.NET网页动态抓取问题 本人在做网页抓取程序,由于抓取的内容,源代码里是看不到的, 用WINFORM是可以用WebBrowser这样实现的..我想知道用ASP.NET的话,有没有能达到这个效果的方法, 我试了 HttpWebRequest,, 但是没找到操作DOM元素的方法. 解决方案 获取出来的是html文本,你可以用正则表达式过去想要的内容! 解决方案二: 如果你需要用DOM,可以用HtmlAgilityPackhttp://htmlagilitypack.codeplex