簡易R語言爬蟲蒐集文章實作(一)

Camille Lin
Dec 25, 2020

--

最近正在學習資料分析,以R語言進行爬蟲作業,蒐集網站上的文章再進一步做文字分析,本文為我從0開始學習爬蟲的經驗分享,適合需要簡易爬取網路新聞文章的新手朋友。

本篇先分享超級簡易手動爬蟲的方法(R語言),下回再分享我自己經過幾個月研究寫出來的自動化爬蟲迴圈!

透過爬蟲我們可以抓取網頁上你所需的資源,可以follow以下四步驟:

⓵ 目標網頁的前置作業 ⓶ Copy目標XPath

⓷ 建立Data.frame表格 ⓸ 輸出目標資料

事前作業請先於R或R Studio上Install所需的packages:

library(xml2)
library(XML)
library(rvest)
library(dplyr)
library(lubridate)
library(stringr)

⓵ 目標網頁的前置作業

本文舉HEHO文章為例,提醒Mac使用者不要用Safari開啟網頁,要使用Chrome開啟,我一開始一直用Safari開啟,結果檢視的原始碼都無法使用!

首先要先抓下要爬蟲的文章網址:https://heho.com.tw/archives/153944

url = "https://heho.com.tw/archives/153944" #設定文章網址url
html = read_html(url, encoding = "UTF-8") #以html讀取網址
html
#1 文章網址

找尋到欲爬取的文章後,在空白處點擊滑鼠右鍵「檢查」,會在右方跳出開發者工具(如#3所示)

#2 檢查
#3 開發者工具

✦✦✦ 接下來要說一個好用小工具!✦✦✦
在開發工具的左上角,下圖#4中紫色圈圈處,我稱作選取箭頭,點擊之後可以將滑鼠移至欲爬取的資料上(例如想要抓文章標題就點文章標題,想要抓文章內容就點文章內容),再次點擊可以找到該資料在開發工具框裡對應的行列,下文第二步驟會有實例。

這個選取箭頭解決了我一開始完全不知道該如何抓到需要的XPath,因為一堆碼裡頭實在很難搜尋到呀!(起初沒概念真的很笨的亂找),用這個可以輕鬆抓取到XPath!

#4 選取箭頭

⓶ 複製目標XPath

XPath可以想做是路徑的概念,想要找到你要的資料,就要透過資料的「路徑」去搜尋!接下來我們要爬取文章標題文章內容

文章標題(title)

善用選取箭頭移至文章標題,如下圖#5所示我們找到對應的行列,並在該列上點擊右鍵「Copy full XPath」,將文章標題的XPath抓下來。

文章標題XPath會長這樣:

/html/body/div[1]/main/div/div/div[1]/article/div[1]/header/div[1]/h1

#5 Copy文章標題的 full Xpath
#建立文章標題XPath
xpath =
"/html/body/div[1]/main/div/div/div[1]/article/div[1]/header/div[1]/h1" #此處放剛剛複製下來的Xpath
target = xml_find_all(html, xpath)title = xml_text(target) #抓到文章標題文字title #確認有抓到文章標題

有了XPath能夠透過套件的函數xml_find_all()和xml_text()將文字抓取出來

文章內容(article)

以上述同樣的方法抓到文章內容的XPath

/html/body/div[1]/main/div/div[1]/div[1]/article/div[1]/div

#抓到文章內容文字[Tips:%>%會讓程式碼層層往下執行]article <- html%>%
html_nodes(xpath=”/html/body/div[1]/main/div/div[1]/div[1]/article/div[1]/div”) %>%
html_text()
head(article) #確認有抓到文章內容

這段的程式碼跟上面是一樣的概念只是使用%>%串聯,只要有了XPath與抓取輸出文字的概念,你需要什麼項目都可以透過類似手法去撰寫code。

⓷ 建立Data.frame表格

我們將爬取到的資料建立成表格,可以清楚看見我們抓了什麼資料下來,且轉成data.frame格式可以更方便後續輸出時資料的使用。

Data <- data.frame(Title = title, Article = article)View(Data) #檢視表格

⓸ 輸出目標資料

輸出資料可以依自己的需求存成不同的檔案格式

以下分享輸出為文字檔.txtcsv檔.csv

x為要匯出的檔案
file=檔案名稱
eol=換行符號
col.names = T(顯示行的名稱)
row.names = F(不顯示列的名稱)

#輸出成文字檔.txtwrite.table(x=Data,file="NEWS",eol="\n",col.names = T,row.names = F)#輸出成Csv檔.csv[和write.table()函數使用方法相同,可自行調整參數]write.csv(x=Data,file="NEWS.csv")

執行完以上的程式碼後,只要在你的電腦裡搜尋你給定的檔案名稱就可以搜尋到所匯出的檔案囉!打開檔案即是爬蟲成功的文字檔!

簡易的爬蟲方法成功 (✿開心撒花✿)

--

--

No responses yet