爬蟲其實很簡單!——網路爬蟲快速實現(一)
阿新 • • 發佈:2022-05-03
今天我來帶領大家一起學習編寫一個網路爬蟲!其實爬蟲很簡單,沒有想象中那麼難,也許所有學問都是這樣,恐懼源自於無知。廢話不多說,現在開始我們的爬蟲之旅吧。
爬蟲是什麼?
我們時常聽說程式設計大牛嘴邊一直唸叨著“網路爬蟲“,那網路爬蟲究竟是何方神聖呢? 網路爬蟲能夠模仿使用者瀏覽網頁,並將所想要的頁面中的資訊儲存下來。有些同學不禁要問:“我自己瀏覽網頁,可以手動將資料儲存下來啊,為何要寫個程式去爬取資料呢?“道理其實很簡單,程式能夠在短時間內訪問成千上萬的頁面,並且在短時間內將海量資料儲存下來,這速度可遠遠超越了人工手動瀏覽網頁的速度。
爬蟲的原理
爬取網頁的過程大致分成兩個步驟:
- 爬取網頁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; }
- 分析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();
看完這些相信大家對於網路爬蟲已經入門了,能夠實現一個最簡單的爬蟲程式,接下來我會帶領大家一步步深入,實現一個更加智慧、功能更加強大的爬蟲! 如果各位還有什麼問題,可以留言,我會盡力解答的。