什么是網絡爬蟲?
網絡爬蟲又叫蜘蛛,網絡蜘蛛是通過網頁的鏈接地址來尋找網頁,從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互聯網當成一個網站,那么網絡蜘蛛就可以用這個原理把互聯網上所有的網頁都抓取下來。所以要想抓取網絡上的數據,不僅需要爬蟲程序還需要一個可以接受”爬蟲“發回的數據並進行處理過濾的服務器,爬蟲抓取的數據量越大,對服務器的性能要求則越高。
網絡爬蟲的實現原理
根據這種原理,寫一個簡單的網絡爬蟲程序 ,該程序實現的功能是獲取網站發回的數據,並提取之中的網址,獲取的網址我們存放在一個文件夾中,關於如何就從網站獲取的網址進一步循環下去獲取數據並提取其中其他數據這里就不在寫了,只是模擬最簡單的一個原理則可以,實際的網站爬蟲遠比這里復雜多,深入討論就太多了。除了提取網址,我們還可以提取其他各種我們想要的信息,只要修改過濾數據的表達式則可以。以下是利用Java模擬的一個程序,提取新浪頁面上的鏈接,存放在一個文件里
源代碼
- import java.io.BufferedReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- 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;
- String regex = "http://[\\w+\\.?/?]+\\.[A-Za-z]+";
- Pattern p = Pattern.compile(regex);
- try {
- url = new URL("http://www.sina.com.cn/");
- urlconn = url.openConnection();
- pw = new PrintWriter(new FileWriter("e:/url.txt"), true);//這里我們把收集到的鏈接存儲在了E盤底下的一個叫做url的txt文件中
- 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();
- }
- }
- }
在Eclipse中的運行結果
底部顯示獲取成功了!接下來我們去E盤根目錄下找到url.txt。看看有沒有這個文件
接下來我們打開一下txt文件,會發現一系列的URL鏈接。這些就是我們抓取新浪首頁獲得的所有URL
我們隨便復制一條URL到瀏覽器中打開。看看效果。比如我們用這條http://i1.sinaimg.cn/dy/deco/2013/0316/arr.png
好的。沒有任何問題。圖片都出來了。說明我們抓取的這個URL是有效的
至此我們的一個簡單的Demo就展示完成了