社群爬蟲模組工具-以PTT為例
使用Jsoup爬取網頁資料,並以PTT為例。
首先在開始進行爬取之前,我們必須先瞭解網頁原始碼是怎樣的格式,
以chrome瀏覽器打開PTT網頁 ,
按F12 可以看到網頁原始碼如下。
可以看到是原始碼是由文字和Tag所組成,比如說 <title> 首頁 – 批踢踢實業坊</title> 。
若是直接爬取網頁全部資料需要再進行斷詞處理,
因此可以使用Jsoup套件,他可以藉由選取Tag方式去取得文字。
首先,到Jsoup網站下載JAR檔
使用ECLIPSE開啟一個新專案
在專案上點右鍵->選取Properties->Java Bulid Path->
Libraries->Add External JARs->選取Jsoup的jar->點選OK
以Jsoup官網的例子
public static void main(String[] args) throws IOException { Document doc = Jsoup.connect("http://en.wikipedia.org/").get();//以connect去連接該網址之後get下來得到doc文本 Elements newsHeadlines = doc.select("#mp-itn b a");//在doc文本裡面找尋id為mp-itn的標籤 System.out.print(newsHeadlines); }
簡單說明ㄧ下範例程式 ,
首先連接到 http://en.wikipedia.org/取得資料並且存到doc變數里面,
選取標籤 mp-itn 底下的標籤 b底下的標籤 a
印出結果如下
現在進入正題,以爬取PTT八卦版為例
要進入之前會先跳出 這個頁面
警告未滿18歲不得觀看
我們如果想要爬取八卦版的話,就必須先連結到 https://www.ptt.cc/ask/over18將Cookie記錄下來。
首先我們先觀察表單的程式碼
使用post方式傳送標單,我同意的按鈕名稱為yes、值也為yes。
以及點選我同意之後的網路記錄- over18
可以發現over18這筆記錄裡面的set-cookie 會將 over18這個cookie值設定為1。
程式碼如下所示:
Connection.Response response=Jsoup.connect("https://www.ptt.cc/ask/over18") .userAgent("Mozilla").data("yes","yes").method(Method.POST).execute(); String cookie=response.cookie("over18");
先連結到 https://www.ptt.cc/ask/over18
使用userAgent模擬Mozilla瀏覽網頁,以POST方式傳遞參數yes並且執行。
我們知道cookie名稱為over18,因此將over18這個cookie的值存到String cookie裡面。
接著現在我們想抓八卦版的第一篇文章的標題,如下所示
先觀察網頁原始碼
可以發現標題在<div class="r-ent"> 的 <div class="title">裡
因此程式碼如下
Document doc=Jsoup.connect("https://www.ptt.cc/bbs/Gossiping/index.html") .userAgent("Mozilla").cookie("over18", cookie).get(); String first =doc.select("div[class=r-ent]>div[class=title]>a").get(0).text(); System.out.println(first);
首先爬取八卦版並且將cookie設定為剛剛所存的cookie變數,將內容存到doc裡。
挑選標籤div[class=r-ent] 底下的 標籤div[class=title] 底下的標籤 a 的文字內容。
輸出結果如下
參考內容
- Jsoup官網 , https://jsoup.org
- PTT八卦版, https://www.ptt.cc/bbs/Gossiping/index.html