1. 程式人生 > 其它 >爬蟲其實很簡單!——網路爬蟲快速實現(一)

爬蟲其實很簡單!——網路爬蟲快速實現(一)

今天我來帶領大家一起學習編寫一個網路爬蟲!其實爬蟲很簡單,沒有想象中那麼難,也許所有學問都是這樣,恐懼源自於無知。廢話不多說,現在開始我們的爬蟲之旅吧。

爬蟲是什麼?

我們時常聽說程式設計大牛嘴邊一直唸叨著“網路爬蟲“,那網路爬蟲究竟是何方神聖呢? 網路爬蟲能夠模仿使用者瀏覽網頁,並將所想要的頁面中的資訊儲存下來。有些同學不禁要問:“我自己瀏覽網頁,可以手動將資料儲存下來啊,為何要寫個程式去爬取資料呢?“道理其實很簡單,程式能夠在短時間內訪問成千上萬的頁面,並且在短時間內將海量資料儲存下來,這速度可遠遠超越了人工手動瀏覽網頁的速度。

爬蟲的原理

爬取網頁的過程大致分成兩個步驟:

  1. 爬取網頁html檔案 爬蟲的第一步就是要模擬使用者瀏覽網頁,獲取需要訪問的頁面。 模擬使用者瀏覽網頁的方法很簡單,使用Java類庫中的URLConnection類即可,這個類可以傳送HTTP請求,並返回請求頁的二進位制資料,我們只需將返回的二進位制資料轉換成String型別,這些資料就是請求頁的HTML文字!
//設定需要爬取頁面的URL
URL url = new URL("http://www.baidu.com");  
//建立連線,獲取URLConnection物件
        URLConnection connection = url.openConnection();
//將URLConnection物件轉換成HttpURLConnection物件
        HttpURLConnection httpConnection = (HttpURLConnection) connection;
        httpConnection.setDoOutput(true);
//獲取輸出流
        OutputStreamWriter out = new OutputStreamWriter(httpConnection.getOutputStream(), "8859_1");  
//重新整理輸出流,然後關閉流
        out.flush();  
        out.close();  
        //一旦傳送成功,用以下方法就可以得到伺服器的迴應:  
        String sCurrentLine = "";  
        String sTotalString = "";  
//ResponseCode==200表示請求傳送成功!      if(httpConnection.getResponseCode()==200){
//獲取伺服器返回的輸入流
            InputStream l_urlStream = httpConnection.getInputStream();  
            BufferedReader l_reader = new BufferedReader(new InputStreamReader(l_urlStream));  
            while ((sCurrentLine = l_reader.readLine()) != null) {  
                sTotalString += sCurrentLine + "rn";  
            }  
            System.out.println(sTotalString);
            return true;
        }
  1. 分析html檔案,抽取其中需要的資料 當我們獲取到請求頁的HTML文字之後就需要在一堆HTML標籤中將我們所需要的資料抽取出來。這裡給大家提供一個很好用的抽取HTML資料的第三方Jar包:Jsoup! Jsoup提供了getElementById()、getElementById()等方法,我們能夠很方便地將指定標籤中的資料抽取出來。除此之外,為了方便實現網路爬蟲,Jsoup中已經集成了傳送HTTP請求的函式,而且將整個傳送請求的過程極度地簡化,只需兩步就能完成,無需再使用HttpConnection類庫在傳送HTTP請求前進行一系列複雜的設定,並且Jsoup中返回的就是HTML文字,無需再進行二進位制轉換成HTML文字的操作。程式碼如下:
//通過Jsoup獲取HTML文字
Document doc = Jsoup.connect("http://10.20.100.5:8080/").get();
//獲取HTML中所有的tbody標籤
        Elements tbodys = doc.getElementsByTag("tbody");
//獲取tbody標籤中所有的td標籤
        Elements tds = tbodys.get(1).getElementsByTag("td");
//獲取td中的文字
        tds.get(0).html();

看完這些相信大家對於網路爬蟲已經入門了,能夠實現一個最簡單的爬蟲程式,接下來我會帶領大家一步步深入,實現一個更加智慧、功能更加強大的爬蟲! 如果各位還有什麼問題,可以留言,我會盡力解答的。