2015/9/17

簡單好用的 web scraping R 套件 - rvest

近年來很流行網路爬蟲技術,可以自行捉取自己想要的資訊; 只要不是太複雜的網站,使用 R 底下的套件 httr 就可以捉取了;不過由於 httr 並沒有直接支援 CSS 與 xpath 選取,所以還要額外安裝其他的套件來輔助解析網頁資訊。

最近發現到 rvest 這個套件,直接支援 ccs 與 xptah 選取,安裝 rvest 後,在啟用 rvest 時也會順道加入支援 pipeline 編寫,可以有效避免恐怖的巢狀地獄…
rvest 使用如同一般網路爬蟲技術,流程如下所示:
  • 要捉的網頁真實的網址是什麼 --url = ???
  • 把網頁捉下來 --html( )
  • 解析(parse)網頁,選取所需內容(使用 CSS 或 XPATH ) --html_nodes()
  • 過濾掉其他雜質 -- 此例中我們只留下純文字就好 不留下超連結 html_text()
因為蘋果日報最近的全幅廣告真的很討人厭 > <" ,以下就以自由時報的即時總覽的第一頁進行說明 網址如下: http://news.ltn.com.tw/list/BreakingNews

首先我們可以使用 chrome 中的開發者工具 或是 Firefox 中的 Firebug 來協助我們進行選取,可以發現用以下的語法就能正確捉取我們所要的資料…
  • css 選取語法 .picword
  • xpath 選取語法 //*[@id='newslistul']/li/a
接著就幾乎等於完成了,沒錯這就是最簡單的一隻網路爬蟲 :)
此處以 css選取(html_nodes函數)舉例,並將資料存成 dataframe 格式,以利串接至資料庫中:
 
library(rvest)

 news_url="http://news.ltn.com.tw/list/BreakingNews"

title_css = html(news_url) %>% html_nodes(".picword") %>% html_text()

my_news = data.frame(title = title_css)

View(my_news)

然後你就會有2個重大的發現:
(1)網路爬蟲的入門也蠻簡單的啊~~
(2)即時新聞大部份都不是很重要~~

備註1:使用 xpath 選取
將html_nodes(".picword")以html_nodes( xpath = "//*[@id='newslistul']/li/a")取代即可

備註2: 想要取捉每篇即時新聞的網址,以利後續捉取內文的話呢??
my_news =
data.frame(
title = html(news_url) %>% html_nodes(".picword") %>% html_text()  , 
title_href = html(news_url) %>% html_nodes(".picword") %>% html_attr( "href")  ,
stringsAsFactors=FALSE)  

備註3: 套件作者 Github https://github.com/hadley/rvest

沒有留言:

張貼留言