orsen成长录

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 2 文章 :: 0 评论 :: 0 Trackbacks
       今天想学学正则表达式,就随便写了个爬虫。由于才疏学浅,有不足地方请多多指出。
        网页来源,是自己在网上爬写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

只有注册用户登录后才能发表评论。


网站导航: