利用URL對象和正則表達式、Pattern實現網絡爬蟲的功能。什麼是網絡爬蟲?網絡爬蟲又叫蜘蛛,網絡蜘蛛是通過網頁的鏈接地址來尋找網頁,從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完爲止。如果把整個互聯網當成一個網站,那麼網絡蜘蛛就可以用這個原理把互聯網上所有的網頁都抓取下來。所以要想抓取網絡上的數據,不僅需要爬蟲程序還需要一個可以接受”爬蟲“發回的數據並進行處理過濾的服務器,爬蟲抓取的數據量越大,對服務器的性能要求則越高。
現在我們可以根據這種原理,寫一個簡單的網絡爬蟲程序 ,該程序實現的功能是獲取網站發回的數據,並提取之中的網址,獲取的網址我們存放在一個文件夾中,關於如何就從網站獲取的網址進一步循環下去獲取數據並提取其中其他數據這裏就不在寫了,只是模擬最簡單的一個原理則可以,實際的網站爬蟲遠比這裏複雜多,深入討論就太多了。除了提取網址,我們還可以提取其他各種我們想要的信息,只要修改過濾數據的表達式則可以。
以下是利用Java模擬的一個程序,提取新浪頁面上的鏈接,存放在一個文件裏。
源代碼:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package txt.regex;
import java.io.*; import java.net.*; import java.util.regex.Matcher; import java.util.regex.Pattern;
public class WebSpider {
public static void main(String[] args) {
URL url = null ;
URLConnection urlconn = null ;
BufferedReader br = null ;
PrintWriter pw = null ;
Pattern p = Pattern.compile(regex);
try {
urlconn = url.openConnection();
pw = new PrintWriter( new FileWriter( "url.txt" ), true );
br = new BufferedReader( new InputStreamReader(urlconn.getInputStream()));
String buf = null ;
while ((buf = br.readLine()) != null ) {
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
pw.println(buf_m.group());
}
}
System.out.println( "獲取結束!" );
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
} } |
運行程序後查看“url.txt”文件夾,發現提取了很多網址: