天天看點

新手小白必學的java爬蟲入門

初入爬蟲行業的程式員如何通過java語言編寫爬蟲程式,本文介紹了java爬蟲入門一些知識供大家參考。

首先我們知道jsoup是一款簡單好用的頁面解析工具,百度可以找到中文教程,我這裡隻是作為個人筆記的總結。

首先是下載下傳jar包,有三個在頁面:https://jsoup.org/download 處可以找到下載下傳.下載下傳好了放進項目裡就好

然後建構一個普通的javaSE項目。。。

擷取頁面之前首先第一步應該是了解DOM結構,這裡不深入說明。

然後就是這個工具的繼承關系:Document繼承Element繼承Node. TextNode繼承 Node

然後我們開始做第一步操作document對象

public void test1(){

            //暫時用字元串代替從頁面取來的dom結構

            String html= "<html><head><title>First parse</title></head><body><p id='hehe'>Parsed HTML into a doc.</p></body></html>";

            //解析字元串獲得document對象

            Document doc=Jsoup.parse(html);

            //從doc對象中取得id為hehe的元素然後擷取其中的文字值

           System.out.println(doc.getElementById("hehe").text());

           //從doc對象中取得id為hehe的元素然後擷取其中的html對象

           System.out.println(doc.getElementById("hehe").html());

           //從doc對象中取得id為hehe的元素然後回溯出整體

           System.out.println(doc.getElementById("hehe").root());

            //你可以把document對象看做背景版的js,通過class找,name找甚至利用jQuery都是支援的

    }      

通過第一步主要熟悉了操作這個對象,然後的話我們進入第二步,從網頁中擷取資訊。

很遺憾的是我當時在操作官方的學習文檔時發現他丫居然放了個反爬蟲連結,導緻連結逾時,是以我就寫了這篇日志。第一步找到一個可爬的站點。然後開始爬。

public void test2(){

        try {

            Document doc=Jsoup.connect("http://www.jb51.net")

                              .data("query", "java")

                  .userAgent("Chrome")

                  .cookie("auth", "token")

                  .timeout(3000)

                  .post();

            System.out.println(doc.getElementById("trigger").text());

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }


    }      

目前這個站點是可以爬的,不然你們可以試試其他的~~~~這裡面有請求,浏覽器,cookie,請求時間,請求方式等設定,你高興的話.get()也是足夠通路的。但是不設定時間容易受網絡影響報錯。

//解析本地檔案為dom文檔

    public void test3(){

        //檔案路徑轉化為輸入流對象

        File input = new File("/tmp/input.html");

        try {

            //解析輸入流為dom對象。第三個為路徑的頭

            Document doc = Jsoup.parse(input, "UTF-8","");

            System.out.println(doc);

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }


    }