今天想學學正則表達式,就隨便寫了個爬蟲。由于才疏學淺,有不足地方請多多指出。
網頁來源,是自己在網上爬寫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.aygfsteel.com/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我將第一時間發給你。
網頁來源,是自己在網上爬寫URL保存到文件中,然后在根據文件中的URL來找該網頁中的Email地址。具體實現看代碼







































































































由于不會上傳代碼就湊合這看吧。。如果需要請留下Email我將第一時間發給你。