爬蟲+jsoup輕松爬博客
最近的開發任務主要是爬蟲爬新聞信息,這里主要用到技術就是jsoup,jsoup 是一款 Java的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過
DOM,CSS以及類似於jQuery的操作方法來取出和操作數據。這篇文章就講通過jsoup爬蟲的實際案例,下一篇再講jsoup的具體文檔。
主要爬蟲對象就以我之前寫的一篇博客:【java提高】---java反射機制
主要爬區的信息有
(1)該文章的標題
(2)該文章的二類標題
(3)發表時間
(4)閱讀數量
一、案例演示
1、代碼部分
package com.jincou.pachong; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /* * 這個案例你只需要看結果,具體的jsoup介紹下一篇博客會詳細介紹 */ public class Pachong { public static void main(String args[]){ //這個就是博客中的java反射的url final String url= "https://www.cnblogs.com/qdhxhz/p/9230805.html"; try { //先獲得的是整個頁面的html標簽頁面 Document doc = Jsoup.connect(url).get(); //獲取正文標題,因為整片文章只有標題是用h1標簽 Elements btEl = doc.select("H1"); String bt=btEl.text(); System.out.println("========正文標題======:"); System.out.println(bt); //獲取二級標題 Elements ejbtEls = doc.select("H2"); //因為整片文章有多個二級標題所以進行拼接 StringBuilder ejbts=new StringBuilder(); for(Element el :ejbtEls) { ejbts.append(el.text()); ejbts.append("\n"); } String ejbt=ejbts.toString(); System.out.println("=======二級標題=========:"); System.out.println(ejbt); //獲取時間 Elements timeEl = doc.select("#post-date"); String time=timeEl.text(); System.out.println("========發布時間=========:"); System.out.println("發布時間:" + time); //獲取閱讀數量 Elements readEl = doc.select("#post_view_count"); String read=readEl.text(); System.out.println("========閱讀數量=========:"); System.out.println("閱讀數量:" + read); } catch (IOException e) { e.printStackTrace(); } } }
2、運行結果
注意:我們發現該篇文章的信息都已經爬到了,但是為什么閱讀數量是...
二、案例講解
首先我們要知道:jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操
作數據。上面這兩點很關鍵,具體細說。
1、如何爬到正文標簽
我們看到正文標題的html標簽是h1標簽,所以我們只要獲得H1標簽元素,就可以爬到文本。那么同樣的二級標簽也是通過H2標簽爬到就可以。
2、如何獲得發布時間
因為時間的標簽id是post-date,所以可以通過id獲得該標簽元素。
3、為什么閱讀數量是...
我們看到頁面閱讀是有的,但爬蟲爬到確實...?
這是為什么呢,這點很重要。那是因為該靜態頁面初始加載的時候是沒有閱讀數量的,閱讀數量是后來接口重新調取的。什么意思呢?其實很好理解所以你寫一篇文章的時候像標題,內容,時間
等等是不太會變動的,但是你的閱讀數量每訪問一次都會改變,所以不可能把閱讀數量和文章放在一張表里,而是分開放然后id關聯就可以。這樣就避免每次update文章表。所以靜態頁面初始是沒有
閱讀數量的。
那如何驗證是不是這樣。請看。
我們發現初始的html頁面的閱讀量和評論都是沒有的,而是默認...,所以上面爬到的就是...
那如何能爬到真實的閱讀量呢,這個就需要知道它真實的接口是什么,然后通過其它工具來爬,我們看下獲取閱讀量的真實接口。
既然知道閱讀量的真實接口,那么爬到它也就簡單了。
注意:通過這里我們要明白,只有html元素有的情況下,才能通過jsoup來爬蟲,如果是這接口獲得的數據,那么通過jsoup是無法獲取到的。
有關jsoup也是自己的理解,如有不正確請留言指點。
想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要么別想,要么多做。中校【9】