近年來很流行網路爬蟲技術,可以自行捉取自己想要的資訊;
只要不是太複雜的網站,使用 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