`
javaflex
  • 浏览: 80560 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单的网络邮箱抓取工具(附源码)

    博客分类:
  • java
阅读更多

网络爬虫,搜索引擎为了让自己的数据库足够的强大,没日没夜的在网络上寻找信息,以使自己的信息更全面。大家都知道互联网信息是无穷的,是爆炸式的增长,他们不可能手工索取信息,他们写一小程序不停的在网络上获取信息,于是网络爬虫便产生了。

下面我用java实现了一个简单的专门抓取邮箱的小工具,做得非常粗略,仅供大家参考,

这是效果图

 

 啥也不说了直接上代码吧

 

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
/**
 * 
 * @author http://javaflex.iteye.com/
 *
 */
public class MainFrm extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1L;
	static int count=1;
	static int countUrl=1;
	JFrame frame;
	JButton b1;
	JButton b2;
	JTextArea t1;
	JTextField tf;
	JPanel panel;
	JScrollPane jScrollPane1;
	JLabel label;
	JComboBox comb;
	PopupMenu pm;
	List<Thread> t = new ArrayList<Thread>();
	static int m = 0;

	MainFrm into() {
		pm = new PopupMenu();
		MenuItem openItem = new MenuItem("1.打  开");
		MenuItem closeItem = new MenuItem("2.退  出");
		MenuItem aboutItem = new MenuItem("3.关  于");
		openItem.addActionListener(this);
		closeItem.addActionListener(this);
		aboutItem.addActionListener(this);
		pm.add(openItem);
		pm.add(closeItem);
		pm.add(aboutItem);
		String[] petStrings = { "Baidu", "Google", "Yahoo", "Bing", "Sogou" };
		comb = new JComboBox(petStrings);
		java.net.URL imgURL = MainFrm.class.getResource("mail.png");
		ImageIcon imageicon = new ImageIcon(imgURL);
		panel = new JPanel();
		tf = new JTextField(50);
		tf.setText("留下邮箱");
		label = new JLabel("关键字:");
		frame = new JFrame("邮箱抓取(注:抓取深度暂时默认为2)  QQ:三二八二四七六七六");
		frame.setIconImage(imageicon.getImage());
		b1 = new JButton("提取邮箱");
		b1.addActionListener(this);
		b2 = new JButton("停止抓取");
		b2.addActionListener(this);
		t1 = new JTextArea();
		t1.setLineWrap(true);
		jScrollPane1 = new JScrollPane(t1);
		jScrollPane1.setPreferredSize(new Dimension(200, 200));
		  this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		frame.addWindowListener(new WindowAdapter() { // 窗口关闭事件
					public void windowClosing(WindowEvent e) {
						System.exit(0);
					};
					public void windowIconified(WindowEvent e) { // 窗口最小化事件
						frame.setVisible(false);
						systemTray();
					}
				});
		panel.add(label);
		panel.add(tf);
		panel.add(comb);

		panel.add(b1);
		panel.add(b2);
		frame.getContentPane().add(panel, BorderLayout.NORTH);

		frame.getContentPane().add(jScrollPane1, BorderLayout.CENTER);

		frame.setSize(300, 400);

		frame.pack();

		frame.setVisible(true);
		Dimension winSize = Toolkit.getDefaultToolkit().getScreenSize();
		frame.setLocation((winSize.width - frame.getWidth()) / 2,
				(winSize.height - frame.getHeight()) / 2);
		frame.setAlwaysOnTop(true);
		return this;
	}

	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException,
			UnsupportedLookAndFeelException {
		// TODO Auto-generated method stub
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		new MainFrm().into().systemTray();
		

	}

	@SuppressWarnings({ "unchecked", "deprecation", "static-access" })
	@Override
	public void actionPerformed(ActionEvent e) {

		if ("提取邮箱".equals(e.getActionCommand())) {
			count=1;
			t1.setText("");
			// get("http://dzh.mop.com/whbm/20060109/4/lSgg8I6063c68aS3.shtml");
			String http = "";
			int combo = (comb.getSelectedIndex());
			switch (combo) {
			case 0:
				http = "http://www.baidu.com/s?wd=";
				break;
			case 1:
				http = "http://www.google.com.hk/search?num=50&q=";
				break;
			case 2:
				http = "http://www.yahoo.cn/s?q=";
				break;
			case 3:
				http = "http://cn.bing.com/search?q=";
				break;
			case 4:
				http = "http://www.sogou.com/web?query=";
				break;
			default:
				http = "http://www.baidu.com/s?wd=";
				break;
			}

			final List<Map> list = get(http + tf.getText());
			m = list.size();
			for (int i = 0, n = list.size(); i < n; i++) {
				final Map map = list.get(i);
				Thread tt = new Thread() {
					public void run() {
						Iterator<String> iterator = map.values().iterator();
						while (iterator.hasNext()) {
							String u=iterator.next();
							get(u);
						}
					}
				};
				t.add(tt);
				tt.start();
			}

		} else if ("终止抓取".equals(e.getActionCommand())) {
			for (int i = 0; i < t.size(); i++) {
				t.get(i).stop();
			}
		} else if ("1.打  开".equals(e.getActionCommand())) {
			frame.setVisible(true);
			frame.setExtendedState(frame.NORMAL);
		} else if ("2.退  出".equals(e.getActionCommand())) {
			System.exit(0);
		}else if ("3.关  于".equals(e.getActionCommand())) {
			JOptionPane.showMessageDialog(null, "本程序仅供初学参考 QQ:三二八二四七六七六");
		}

	}

	@SuppressWarnings("unchecked")
	public List<Map> get(String urlStr) {
		List<Map> list = new ArrayList<Map>();
		try {
			URL url = new URL(urlStr);

			URLConnection rulConnection = url.openConnection();
			HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;
			httpUrlConnection.setRequestProperty("User-Agent",
					"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
			BufferedReader br = new BufferedReader(new InputStreamReader(
					httpUrlConnection.getInputStream()));

			String line = "";
			while ((line = br.readLine()) != null) {
				Map map = pr(line);
				list.add(map);

			}
		} catch (FileNotFoundException e) {
			//e.printStackTrace();
		} catch (IOException e) {
			//e.printStackTrace();
		} finally {
			m--;
			if (m <= 0) {
				// JOptionPane.showMessageDialog(null, "提取结束");
			}
		}

		return list;
	}

	@SuppressWarnings("unchecked")
	public Map pr(String aa) {
		Pattern pattern = Pattern
				.compile("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+");
		Pattern pattern2 = Pattern
				.compile("(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?");
		Matcher matcher = pattern.matcher(aa);
		Map<String, String> emailMap = new HashMap<String, String>();

		Matcher matcher2 = pattern2.matcher(aa);
		Map<String, String> httpMap = new HashMap<String, String>();
		while (matcher2.find()) {
			httpMap.put(matcher2.group(), matcher2.group());
		}
		while (matcher.find()) {
			emailMap.put(matcher.group(), matcher.group());
		}
		Iterator<String> iterator = emailMap.values().iterator();
		while (iterator.hasNext()) {
			String str = iterator.next();
			t1.append("第"+(count++)+"个:"+str + "\r\n");
		}
		return httpMap;
	}

	public void systemTray() {
		try {
			if (java.awt.SystemTray.isSupported()) {
				final java.awt.SystemTray st = java.awt.SystemTray
						.getSystemTray();
				Image image = Toolkit.getDefaultToolkit().getImage(
						getClass().getResource("email_go.png"));
				final java.awt.TrayIcon ti = new java.awt.TrayIcon(image);
				ti.setToolTip("邮箱抓取");
				ti.setPopupMenu(pm);
				st.add(ti);
			}
		} catch (Exception e) {
		}
	}
	public String toString(){
		new MainFrm().into();
		return null;
	}

}

 @author http://javaflex.iteye.com/

 

自动发送邮件的功能(待续)

 

  • 大小: 16.3 KB
5
6
分享到:
评论
3 楼 tjyangchenliang 2012-06-26  
的顶顶顶顶顶顶顶顶顶顶谢谢
2 楼 makaihui1991 2011-11-16  
1 楼 00001000 2011-11-16  
天王盖地虎,宝塔镇河妖。

相关推荐

    网页链接抓取工具(源码)

    网页链接抓取工具是一种用于自动化地从互联网上搜集特定信息的程序。这个工具的核心功能是通过输入一个或多个网址,程序会访问这些页面并利用正则表达式来解析和提取页面上的目标数据。源码的提供让使用者可以深入...

    邮件抓取器(本地和网络)全部源码

    【邮件抓取器(本地和网络)全部源码】是一个编程项目,主要功能是通过特定算法和逻辑,从本地文件和互联网网页中提取电子邮件地址。这个工具可能使用了正则表达式、网络爬虫技术以及文件解析技术来实现。下面将详细...

    webmagic爬取downloademail附源码

    【标题】"webmagic爬取downloademail附源码"指的是使用WebMagic这个开源Java爬虫框架,来抓取特定网站——https://www.downloademail.info上的电子邮件地址。WebMagic是一个轻量级、高度模块化的Web爬虫框架,适用于...

    NET版抓取MAIL并群发邮件的小程序[源码]

    标题中的“NET版抓取MAIL并群发邮件的小程序[源码]”表明这是一个基于.NET框架的程序,用于抓取电子邮件地址并进行批量发送邮件。这个小程序的核心功能包括两个部分:邮件地址的抓取和邮件的群发。下面将详细阐述这...

    Java抓取URL/Email实例源码

    在IT行业中,网络数据抓取是一项重要的技能,特别是在大数据分析、搜索引擎优化以及市场研究等领域。Java作为一门广泛应用的编程语言,提供了丰富的库和工具来实现网页数据抓取,特别是URL和电子邮件(Email)的提取...

    自动搜索邮箱地址源码

    总结来说,"自动搜索邮箱地址源码"是一个结合了网络爬虫技术和邮件群发功能的工具,它的核心任务是自动在网络中搜集邮件地址,并利用这些地址进行批量邮件发送。开发和使用这样的工具需要对网络爬虫、邮件协议、反...

    C#贴吧采集Email小工具源码

    【标题】"C#贴吧采集Email小工具源码"是一个基于C#编程语言开发的简易程序,主要用于从网络上的百度贴吧中抓取电子邮件地址。这个工具可能是为了教学或个人研究目的而创建,而不是一个成熟的商业产品,因此在功能上...

    最新cpa交友全自动注册工具源码+CPA自动注册源码

    以上是关于"最新cpa交友全自动注册工具源码+CPA自动注册源码"的相关知识点,涉及了从网络爬虫、数据处理到模拟用户行为等多个技术层面。理解这些技术可以帮助开发者构建或分析类似的自动化注册工具。

    在线仿站在线扒站源码 可自定义邮箱接口

    标题提到的“在线仿站在线扒站源码”是一个工具或服务,它允许用户在无需手动操作的情况下,通过自定义的邮箱接口来接收仿站任务的结果。 首先,我们需要理解PHP。PHP是一种广泛使用的开源服务器端脚本语言,特别...

    SGK查询源码.zip

    此外,对于想要深入研究社工库查询或网络安全的人来说,这个源码可以作为一个学习资源,帮助他们提升技能,了解当前的实践方法和技术趋势。同时,这也可能是一个很好的案例研究,用于教学或讨论软件工程的最佳实践,...

    网页提取邮箱系统

    网页提取邮箱系统是一种专门设计用于从网页或文本文档中批量获取电子邮箱地址的工具。在互联网营销、数据挖掘或客户服务等场景中,这样的系统能够极大地提高效率,帮助用户快速定位到目标群体。以下是关于这个系统的...

    HttpClient 登录163邮箱

    综上所述,HttpClient是一个强大的工具,可以用于登录163邮箱或其他需要HTTP交互的场景。使用时,需理解HTTP协议,熟悉HttpClient的API,并可能结合HTML解析库处理登录页面的动态内容。正确配置和使用HttpClient,...

    google 批量site:网页 获取批量邮箱地址

    4. **数据抓取工具和技术**: - Python是一个常见的选择,因为它有许多库如BeautifulSoup和Scrapy,可以方便地解析HTML和执行网络请求。JavaScript渲染服务如Selenium或Puppeteer可以处理依赖JavaScript加载的内容...

    在线仿站 扒站源码 可自定义邮箱接口

    本文将详细讲解这两个概念以及如何利用提供的工具实现这一过程,并且介绍如何自定义邮箱接口来接收相关数据。 首先,我们来理解什么是“仿站”。仿站,顾名思义,就是模仿或复制一个已存在的网站,包括其设计风格、...

    使用selenium自动登录qq邮箱并按照过滤条件过滤后自动下载附件源码

    【标题】:使用selenium自动登录qq邮箱并按照过滤条件过滤后自动下载附件源码 在信息技术领域,自动化测试和数据抓取是常见的任务之一。selenium是一个强大的Web自动化工具,它允许开发者模拟用户行为,如点击、...

    网页邮箱扫描器

    网页邮箱扫描器是一款基于Visual Basic (VB) 开发的工具,其主要功能是抓取网页上的电子邮件地址,并能进行群发邮件操作。该程序对于网络营销、邮件推广或者数据分析等场景可能具有一定的实用性。通过源码的提供,...

    在线仿站 扒站源码 可自定义邮箱接口.zip

    这通常涉及到网络爬虫技术,使用Python的Scrapy框架或者JavaScript的axios库可以实现数据抓取。需要注意的是,合法和道德的扒站应遵循robots.txt协议,尊重网站的版权,不侵犯他人的知识产权。 在实际操作中,仿站...

    易语言采集邮箱源码-易语言

    综合这三个文件,我们可以推测这个易语言项目是一个基于多线程的网络爬虫程序,用于抓取和收集互联网上的邮箱地址。程序通过HTTP请求获取网页,使用正则表达式解析出邮箱地址,并利用线程池技术来提高爬取速度和效率...

    邮件抓取器的实现

    【邮件抓取器的实现】 在信息技术领域,邮件抓取器是一种工具,它能够自动从邮件服务器上批量下载或抓取邮件。...此外,理解网络通信、邮件协议和编程语言的基本概念对于成功实现邮件抓取器至关重要。

    网站信息查询工具1.5_whois_网站信息查询工具1.5_

    4. **查询网站邮箱**:工具能抓取网页中的邮箱地址,这对于市场营销、邮件订阅或者网络安全研究来说,是个非常实用的功能。 5. **WHOIS查询**:WHOIS是一种互联网上的标准服务,可以查询域名的注册信息,包括注册人...

Global site tag (gtag.js) - Google Analytics