蘋果日報完整爬蟲

取得蘋果內容頁面

library(rvest)
## Loading required package: xml2
getArticle <- function(ele){
  e <- read_html(ele) 
  content= e %>% html_nodes('.articulum.trans') %>% 
    html_text() %>% 
    iconv(from='UTF-8', to='UTF-8')
  title <- e %>% html_nodes('#h1') %>% 
    html_text() %>% 
    iconv(from='UTF-8', to='UTF-8')
  dt <- e %>% html_nodes('.gggs time') %>% 
    html_text() %>% 
    iconv(from='UTF-8', to='UTF-8')
  category <- e %>% 
    iconv(from='UTF-8', to='UTF-8') %>%
    gsub(pattern='.*"keywords": \\["(.+?)"\\].*', '\\1', x=.)
  clicked <- e %>% html_nodes('.clicked') %>% 
    html_text() %>% 
    iconv(from='UTF-8', to='UTF-8')  
  data.frame(content = content, title = title, dt=dt,category=category, 
             clicked=clicked,stringsAsFactors = FALSE )
}

測試頁面抓取

getArticle('http://www.appledaily.com.tw/realtimenews/article/life/20160415/839550/')
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           content
## 1 \n                                        (更新:增加影片)<U+00A0>中央研究院院長翁啟惠將研究專利技轉給台灣浩鼎生技,他的女兒翁郁琇卻持有浩鼎股票,並在可疑時間點買賣,引發爭議。翁啟惠今午自日本轉機返台,他剛於下午1:12現身松山機場。他先表示「抱歉」,並強調「絕對沒有內線交易」。<U+00A0>翁啟惠預計下午2時30分到總統府向馬總統報告。(生活中心/台北報導)<U+00A0>出版:13:13更新:13:38<U+00A0><U+00A0>\n                    翁啟惠返台。莊宗達攝翁啟惠返台。莊宗達攝翁啟惠在旁人協助下離開。莊宗達攝翁啟惠太太(右)在旁人協助下離開。莊宗達攝大批媒體採訪。莊宗達攝大批媒體圍堵。莊宗達攝翁啟惠返台。方萬民攝                    \n                    googletag.cmd.push(function() {googletag.display('teadstv');})\n                    googletag.cmd.push(function() {googletag.display('goldenhorse');})\n                    googletag.cmd.push(function() {googletag.display('textlink');})\n                    有話要說 投稿「即時論壇」\n                  
##                                                       title
## 1 【更新】13:12翁啟惠現身松山機場 強調「絕對沒有內線交易」
##                    dt category     clicked
## 1 2016年04月15日13:38     生活 人氣(20531)

抓取清單連結

domain = 'http://www.appledaily.com.tw'
getURL <- function(newsurl){
  apple <- read_html(newsurl, encoding="UTF-8")  
  rtddt <- apple %>% html_nodes('.rtddt')  
  url <- rtddt %>% html_nodes('a') %>% html_attr('href')
  url <- gsub(domain, "", url)
  url <- paste0(domain, url) 
  df <- lapply(url, getArticle)
  
  dfall <- do.call("rbind", df)
  dfall
}   

測試清單抓取

a<- getURL('http://www.appledaily.com.tw/realtimenews/section/new/')

抓取多頁資料

pageurl <- 'http://www.appledaily.com.tw/realtimenews/section/new/'
dfall <- lapply(1:2, 
                function(i){
                  url <- paste0(pageurl, i)
                  df <- getURL(url)
                } 
)
appledaily <- do.call("rbind", dfall)

讀取網路上的資料檔

download.file('https://raw.githubusercontent.com/ywchiu/rtibame/master/appledaily.RData', 'appledaily.RData')
load('appledaily.RData')

儲存爬取下來的資料檔

save(appledaily, file="appledaily.RData")

可以印出該資料的輪廓

class(appledaily)
## [1] "data.frame"
dim(appledaily)
## [1] 1500    5
str(appledaily)
## 'data.frame':    1500 obs. of  5 variables:
##  $ content : chr  "\n                                        (更新:新增影片)想要透過刮刮樂彩券一夕致富,但他卻用錯方法!台中市一名黃姓男子覬覦頭獎"| __truncated__ "\n                                        澳洲一名就讀雪梨大學的華裔博士生,日前公開一段燒毀中國護照的影片,還大肆批評留澳學生"| __truncated__ "\n                                        【行銷專題企劃】房價高高在上,沒錢買房沒關係,但你認為自己是聰明的租屋族嗎? 由蘋果地"| __truncated__ "\n                                        本內容由中央廣播電臺提供<U+00A0><U+00A0> <U+00A0> <U+00A0> <U+00A0>美國國防部長卡特(A"| __truncated__ ...
##  $ title   : chr  "【更新】搶2.2萬彩券刮中1.4萬 沒發財還得入獄" "拿到澳洲護照後 他放火燒中國護照" "【特企】房市大追擊- 租屋這些事情要小心" "【央廣RTI】美菲軍演  美防長南海登艦" ...
##  $ dt      : chr  "2016年04月15日14:32" "2016年04月15日14:32" "2016年04月15日14:31" "2016年04月15日14:30" ...
##  $ category: chr  "社會" "國際" "地產" "國際" ...
##  $ clicked : chr  "人氣(1754)" "人氣(0)" "人氣(0)" "人氣(0)" ...

可以印出該資料的輪廓

appledaily[1,"content"]
## [1] "\n                                        (更新:新增影片)想要透過刮刮樂彩券一夕致富,但他卻用錯方法!台中市一名黃姓男子覬覦頭獎高達2600萬的「開門見喜」刮刮樂彩券,上月佯裝顧客進入彩券行,趁女店員拿出11張彩券供其挑選時,抓起彩券奪門而出騎車逃逸,警方調閱監視器循線追查,昨日在北區逮捕黃嫌,他坦承搶來的彩券共刮中1萬4千多元,但已經兌獎花用殆盡,警方訊後將全案依詐欺罪嫌移送。<U+00A0>警方調查,黃姓男子﹝27歲﹞上個月頭戴安全帽及口罩,到河南路一家彩券行佯稱購買每張售價2000元的「開門見喜」刮刮樂,並要求挑選彩券號碼,朱姓女店員不疑有他,從櫃檯拿出連號彩券總計11張供其挑選,黃男竟趁朱女不注意之際,抓起彩券奪門而出,並跳上一旁機車逃逸,店家總計損失新臺幣2萬2,000元。<U+00A0>轄區第六分局何安派出所獲報,調閱路口監視器過濾比對,發現嫌犯已預謀將車牌用紅色口罩遮蔽,逃逸時刻意繞行小巷,更3次變裝意圖混淆警方追查,只是看似完美無瑕的犯罪計畫,卻在飆速逃逸時口罩隨風微微揚起,車牌部分英文及數字號碼在鏡頭下仍能辨識,在員警比對將近百支監視鏡頭畫面後,通知孫姓車主到案說明。<U+00A0>孫男到案後表示,案發前已將機車借給黃姓友人使用,但無法提供黃嫌聯絡方式,警方鍥而不捨擴大比對監視畫面,鎖定黃嫌時常出沒北區北平三街一帶,經過日埋伏,昨天逮到狡猾的黃嫌,他供稱因缺錢花用,迫於無奈下才出此下策,所得彩券刮開後總計兌換彩金1萬4,500元,且已全數花費殆盡,警方訊後將全案依詐欺罪嫌移送。(王煌忠/台中報導)<U+00A0>發稿:1304更新:1432<U+00A0>\n                    黃姓男子佯裝購買刮刮樂,趁選號時一把抓走刮刮樂逃逸,女店員當下傻眼不已。翻攝畫面黃嫌逃逸時將車牌以口罩遮住,逃避警方追查。翻攝畫面                    \n                    googletag.cmd.push(function() {googletag.display('teadstv');})\n                    googletag.cmd.push(function() {googletag.display('goldenhorse');})\n                    googletag.cmd.push(function() {googletag.display('textlink');})\n                    有話要說 投稿「即時論壇」\n                  "
appledaily[1,"content"] %>% strsplit("googletag") %>% .[[1]] %>% .[1]
## [1] "\n                                        (更新:新增影片)想要透過刮刮樂彩券一夕致富,但他卻用錯方法!台中市一名黃姓男子覬覦頭獎高達2600萬的「開門見喜」刮刮樂彩券,上月佯裝顧客進入彩券行,趁女店員拿出11張彩券供其挑選時,抓起彩券奪門而出騎車逃逸,警方調閱監視器循線追查,昨日在北區逮捕黃嫌,他坦承搶來的彩券共刮中1萬4千多元,但已經兌獎花用殆盡,警方訊後將全案依詐欺罪嫌移送。<U+00A0>警方調查,黃姓男子﹝27歲﹞上個月頭戴安全帽及口罩,到河南路一家彩券行佯稱購買每張售價2000元的「開門見喜」刮刮樂,並要求挑選彩券號碼,朱姓女店員不疑有他,從櫃檯拿出連號彩券總計11張供其挑選,黃男竟趁朱女不注意之際,抓起彩券奪門而出,並跳上一旁機車逃逸,店家總計損失新臺幣2萬2,000元。<U+00A0>轄區第六分局何安派出所獲報,調閱路口監視器過濾比對,發現嫌犯已預謀將車牌用紅色口罩遮蔽,逃逸時刻意繞行小巷,更3次變裝意圖混淆警方追查,只是看似完美無瑕的犯罪計畫,卻在飆速逃逸時口罩隨風微微揚起,車牌部分英文及數字號碼在鏡頭下仍能辨識,在員警比對將近百支監視鏡頭畫面後,通知孫姓車主到案說明。<U+00A0>孫男到案後表示,案發前已將機車借給黃姓友人使用,但無法提供黃嫌聯絡方式,警方鍥而不捨擴大比對監視畫面,鎖定黃嫌時常出沒北區北平三街一帶,經過日埋伏,昨天逮到狡猾的黃嫌,他供稱因缺錢花用,迫於無奈下才出此下策,所得彩券刮開後總計兌換彩金1萬4,500元,且已全數花費殆盡,警方訊後將全案依詐欺罪嫌移送。(王煌忠/台中報導)<U+00A0>發稿:1304更新:1432<U+00A0>\n                    黃姓男子佯裝購買刮刮樂,趁選號時一把抓走刮刮樂逃逸,女店員當下傻眼不已。翻攝畫面黃嫌逃逸時將車牌以口罩遮住,逃避警方追查。翻攝畫面                    \n                    "

使用strsplit 分割字串

a <- 'aaa@bbb@ccc'
strsplit(a,'@')
## [[1]]
## [1] "aaa" "bbb" "ccc"

使用strsplit 分割字串

a <- 'aaa@bbb@ccc'
strsplit(a,'@')
## [[1]]
## [1] "aaa" "bbb" "ccc"

去除掉所有文章前後空白

appledaily[1,"content"] %>% strsplit("googletag") %>% .[[1]] %>% .[1] %>% trimws()
## [1] "(更新:新增影片)想要透過刮刮樂彩券一夕致富,但他卻用錯方法!台中市一名黃姓男子覬覦頭獎高達2600萬的「開門見喜」刮刮樂彩券,上月佯裝顧客進入彩券行,趁女店員拿出11張彩券供其挑選時,抓起彩券奪門而出騎車逃逸,警方調閱監視器循線追查,昨日在北區逮捕黃嫌,他坦承搶來的彩券共刮中1萬4千多元,但已經兌獎花用殆盡,警方訊後將全案依詐欺罪嫌移送。<U+00A0>警方調查,黃姓男子﹝27歲﹞上個月頭戴安全帽及口罩,到河南路一家彩券行佯稱購買每張售價2000元的「開門見喜」刮刮樂,並要求挑選彩券號碼,朱姓女店員不疑有他,從櫃檯拿出連號彩券總計11張供其挑選,黃男竟趁朱女不注意之際,抓起彩券奪門而出,並跳上一旁機車逃逸,店家總計損失新臺幣2萬2,000元。<U+00A0>轄區第六分局何安派出所獲報,調閱路口監視器過濾比對,發現嫌犯已預謀將車牌用紅色口罩遮蔽,逃逸時刻意繞行小巷,更3次變裝意圖混淆警方追查,只是看似完美無瑕的犯罪計畫,卻在飆速逃逸時口罩隨風微微揚起,車牌部分英文及數字號碼在鏡頭下仍能辨識,在員警比對將近百支監視鏡頭畫面後,通知孫姓車主到案說明。<U+00A0>孫男到案後表示,案發前已將機車借給黃姓友人使用,但無法提供黃嫌聯絡方式,警方鍥而不捨擴大比對監視畫面,鎖定黃嫌時常出沒北區北平三街一帶,經過日埋伏,昨天逮到狡猾的黃嫌,他供稱因缺錢花用,迫於無奈下才出此下策,所得彩券刮開後總計兌換彩金1萬4,500元,且已全數花費殆盡,警方訊後將全案依詐欺罪嫌移送。(王煌忠/台中報導)<U+00A0>發稿:1304更新:1432<U+00A0>\n                    黃姓男子佯裝購買刮刮樂,趁選號時一把抓走刮刮樂逃逸,女店員當下傻眼不已。翻攝畫面黃嫌逃逸時將車牌以口罩遮住,逃避警方追查。翻攝畫面"

使用strsplit 與 paste 完成清理函式

appledaily[1,"content"] %>% strsplit("googletag") %>% .[[1]] %>% .[1] %>% trimws() %>% strsplit('[ \n\r]+') %>% unlist() %>% paste(collapse=' ')
## [1] "(更新:新增影片)想要透過刮刮樂彩券一夕致富,但他卻用錯方法!台中市一名黃姓男子覬覦頭獎高達2600萬的「開門見喜」刮刮樂彩券,上月佯裝顧客進入彩券行,趁女店員拿出11張彩券供其挑選時,抓起彩券奪門而出騎車逃逸,警方調閱監視器循線追查,昨日在北區逮捕黃嫌,他坦承搶來的彩券共刮中1萬4千多元,但已經兌獎花用殆盡,警方訊後將全案依詐欺罪嫌移送。<U+00A0>警方調查,黃姓男子﹝27歲﹞上個月頭戴安全帽及口罩,到河南路一家彩券行佯稱購買每張售價2000元的「開門見喜」刮刮樂,並要求挑選彩券號碼,朱姓女店員不疑有他,從櫃檯拿出連號彩券總計11張供其挑選,黃男竟趁朱女不注意之際,抓起彩券奪門而出,並跳上一旁機車逃逸,店家總計損失新臺幣2萬2,000元。<U+00A0>轄區第六分局何安派出所獲報,調閱路口監視器過濾比對,發現嫌犯已預謀將車牌用紅色口罩遮蔽,逃逸時刻意繞行小巷,更3次變裝意圖混淆警方追查,只是看似完美無瑕的犯罪計畫,卻在飆速逃逸時口罩隨風微微揚起,車牌部分英文及數字號碼在鏡頭下仍能辨識,在員警比對將近百支監視鏡頭畫面後,通知孫姓車主到案說明。<U+00A0>孫男到案後表示,案發前已將機車借給黃姓友人使用,但無法提供黃嫌聯絡方式,警方鍥而不捨擴大比對監視畫面,鎖定黃嫌時常出沒北區北平三街一帶,經過日埋伏,昨天逮到狡猾的黃嫌,他供稱因缺錢花用,迫於無奈下才出此下策,所得彩券刮開後總計兌換彩金1萬4,500元,且已全數花費殆盡,警方訊後將全案依詐欺罪嫌移送。(王煌忠/台中報導)<U+00A0>發稿:1304更新:1432<U+00A0> 黃姓男子佯裝購買刮刮樂,趁選號時一把抓走刮刮樂逃逸,女店員當下傻眼不已。翻攝畫面黃嫌逃逸時將車牌以口罩遮住,逃避警方追查。翻攝畫面"

修改原本的content 欄位內容

contentclean <- function(news){
    news %>% strsplit("googletag") %>% .[[1]] %>% .[1] %>% trimws() %>% strsplit('[ \n\r]+') %>% unlist() %>% paste(collapse=' ')
}
appledaily$content <- sapply(appledaily$content, contentclean)

抓出點閱數字

appledaily[1,"clicked"] %>% 
      gsub('.*\\((\\d+)\\)','\\1', x=.)
## [1] "1754"

修改點閱數字

appledaily$view_cnt <- appledaily$clicked %>% 
     gsub('.*\\((\\d+)\\)','\\1', x=.)

移除Clicked 欄位

appledaily$clicked = NULL

時間轉換

appledaily$dt <- strptime(appledaily$dt, "%Y年%m月%d日%H:%M")
appledaily$dt <- as.POSIXct(appledaily$dt)