使用R語言進行超簡單的爬蟲

Vincent Zheng
新手工程師的程式教室
5 min readMar 31, 2018

R語言是一種能用來做統計和資料分析的語言,此外也能進行網路爬蟲。所謂爬蟲就是將網頁上的資料下載回來,本文將示範如何撰寫R語言,進行簡易的爬蟲。

一、安裝R環境與開發工具

R語言環境:https://cran.r-project.org/bin/windows/base/

R開發工具:https://www.rstudio.com/products/rstudio/download/

二、透過程式安裝套件

開啟R Studio開發工具,新增一個R Script檔案。

輸入指令,安裝接下來的程式碼所需要的套件。其中「rvest」套件是網路爬蟲會用到的函式庫。「magrittr」則提供管線操作語法,例如本文範例程式的「%>%」語法。寫完後,將程式碼全選,再按Run執行。

三、準備要爬的網頁

準備一個有「文章列表」的網頁,此處網頁以Mobile01論壇的機車討論區為例:https://www.mobile01.com/forumtopic.php?c=29

Mobile01的機車討論區

在文章標題按滑鼠右鍵,選擇「檢測元素」,這時會開啟瀏覽器的開發者工具。找到文章標題文字所對應的HTML標籤,按滑鼠右鍵,選擇「複製XPath」以備用。

這個XPath指的是HTML文件中的「路徑」。在這個範例,我們要的是<a>標籤的路徑,因為它的內容是需要的文章標題。

複製到的XPath路徑可能會因瀏覽器而有不同,筆者使用Firefox,路徑是完整地從<html>到<a>標籤為止。
如果使用Chrome,XPath會是 「//*[@id="maincontent"]/div[6]/table/...」代表路徑是從id屬性為maincontent的標籤開始。

四、撰寫程式進行爬蟲

首先引入剛安裝好的套件(函式庫),並將剛剛文章列表網頁的網址指定給變數url。

有了url,接下來就要使用讀取網頁的函式了。請呼叫「read_html」,傳入網址進行讀取,此時會得到該網頁的HTML資料。
再呼叫「html_nodes」,並傳入XPath,在前面的HTML資料中,透過這個路徑來指定要爬取哪個網頁元素(標籤)。
最後呼叫「html_text」,取得該HTML標籤中的內容文字。以上步驟的結果會指定給變數titles,裡面集合了爬取到的文章標題。

注意XPath後面的<tr>標籤,原先為tr[1](或其他數字),此處要改為tr,代表要爬取所有的tr表格列(文章列),而不是特定一個<tr>。
而程式碼中的「%>%」,代表將前面方法的執行結果丟到後面方法的參數去執行。

依照同樣步驟,對「文章回覆數」進行爬取,指定給變數replies。

五、產生表格

取得需要的資料後,現在示範以表格的方式呈現。只要呼叫「data.frame」函式,傳入欄位名稱和資料集合。最後使用「View」函式,將表格物件顯示出來就完成了。此處標題與回覆數的欄位名稱分別是Title與Reply。

記得要將程式碼全選再按「Run」,才能正常執行。

觀察表格,確實爬取到該網頁的文章標題與回覆數。雖然這些東西在原始網頁同樣也可查看,但透過R語言操作,可將重點資料以簡潔的方式呈現。若爬取更多資料,也許能進一步做特別的統計分析或其他用途。

Mobile01機車討論區(全部分類)
Mobile01機車討論區(電動車分類)

--

--

Vincent Zheng
新手工程師的程式教室

我是Vincent,是個來自資管系的後端軟體工程師。當初因為學校作業,才踏出寫部落格的第一步。這裡提供程式教學文章,包含自學和工作上用到的經驗,希望能讓讀者學到東西。我的部落已搬家至 https://chikuwa-tech-study.blogspot.com/