orsen成长录
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
3 随笔 :: 2 文章 :: 0 评论 :: 0 Trackbacks
<
2009年9月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的文章
我的评论
我的参与
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(3)
Java(1)
(rss)
Oracle(1)
(rss)
Strust(1)
(rss)
随笔档案
(5)
2009年9月 (5)
文章分类
Java
(rss)
oracle
(rss)
struts
(rss)
搜索
最新评论
阅读排行榜
1. 简单实现网邮件爬虫 (382)
2. 四步搞定Struts验证框架(136)
3. oracle 游标的使用(134)
4. Java中调用Oracle存贮过程(102)
5. Struts实现文件上传(94)
评论排行榜
1. 四步搞定Struts验证框架(0)
2. 简单实现网邮件爬虫 (0)
3. oracle 游标的使用(0)
4. Java中调用Oracle存贮过程(0)
5. Struts实现文件上传(0)
简单实现网邮件爬虫
今天想学学正则表达式,就随便写了个爬虫。由于才疏学浅,有不足地方请多多指出。
网页来源,是自己在网上爬写URL保存到文件中,然后在根据文件中的URL来找该网页中的Email地址。具体实现看代码
import
java.io.BufferedReader;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
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;
/** */
/**
* 网络爬虫
* 首先要把要爬的网页先存到文件中
*
@author
orsen
http://www.blogjava.net/orsen/
*
*/
public
class
Email
{
private
BufferedReader reader;
private
static
int
flag
=
0
;
//
统计线程的数量
private
static
long
count
=
0
;
//
统计一同找到的邮件的数量
//
线程内部类 每个线程单独连接一个URL 对其进行操作
class
WW
extends
Thread
{
//
文件中的每一个URL
private
String tempurl;
public
WW(String url)
{
this
.tempurl
=
url;
}
//
在每个开启的线程中连接
public
void
run()
{
while
(
this
.isAlive())
{
try
{
URL url
=
new
URL(tempurl);
String ss;
BufferedReader threader
=
new
BufferedReader(
new
InputStreamReader(url.openStream()));
while
((ss
=
threader.readLine())
!=
null
)
{
//
然后在找到网页中没行看有没有匹配的Email
getEmail(ss);
}
}
catch
(MalformedURLException e)
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(IOException e)
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
flag
--
;
}
/** */
/**
* 分析目标的页的一行 找到Email
*
@param
ss one line of target page
*/
public
void
getEmail(String ss)
{
Matcher m
=
Pattern.compile(
"
[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+
"
).matcher(ss);
while
(m.find())
{
System.out.println(m.group()
+
"
------第----
"
+
count
+++
"
个邮件
"
);
}
}
}
public
Email()
{
try
{
//
"XXXXXXXXXXX" 表示存 要爬的网页 文件
reader
=
new
BufferedReader(
new
InputStreamReader(
new
FileInputStream(
"
c:\\www.csdn.net.txt
"
)));
}
catch
(FileNotFoundException e)
{
e.printStackTrace();
}
}
/** */
/**
* 开启线程,最大开启39个线程同时同时访问
*/
public
void
writ()
{
try
{
String sm;
//
从文件中读取50条网站,开启50个线程。
for
(
int
i
=
0
; i
<
10
; i
++
)
{
sm
=
reader.readLine();
WW w
=
new
WW(sm);
w.start();
flag
++
;
}
//
如果当前的线程数小于20,那么在继续开启新的线程。
if
(flag
<
20
)
{
//
如果还有,那么在条用给方法,形成递归。这样对内存消耗非常大。
if
((sm
=
reader.readLine())
!=
null
)
{
writ();
}
}
}
catch
(IOException e)
{
e.printStackTrace();
}
}
public
static
void
main(String[] args)
{
new
Email().writ();
}
}
执行结果如下图:
由于不会上传代码就凑合这看吧。。如果需要请留下Email我将第一时间发给你。
posted on 2009-09-24 22:06
Orsen
阅读(382)
评论(0)
编辑
收藏
所属分类:
Java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
Powered by:
BlogJava
Copyright © Orsen