天下雜誌資料記者 林佳賢
library(rest)
# 讀取剛剛圖片的頁面
doc <- read_html("http://www.appledaily.com.tw/realtimenews/section/new/")
# 選取所有highlight的文字,這裡使用Chrome的檢查功能,觀察要選取的文字的css selector
article_title <- html_nodes(doc, ".rtddt:not(.blog) a")
# 選取所有要的文字之後,把這些文字的「超連結」拿出來
article_link <- html_attr(article_title, "href")
library(rest)
# 生成46頁的即時新聞
base_url <- "http://www.appledaily.com.tw/realtimenews/section/new/"
page_link <- paste0(base_url, 1:46)
# 先生成一個空的串列等等要放全部的文章連結
total_article_link <- c()
# 寫一個迴圈把46頁的文章連結都抓下來
for(j in 1:46) {
doc <- read_html(page_link[j])
...
total_article_link <- c(total_article_link, article_link)
}
library(rest)
# 由於拿到的連結不是完整連結,我們需要在前面加上蘋果日報的網域
base_url <- "http://www.appledaily.com.tw"
# 先生成一個空串列,等等要放文字
total_content <- vector("list", length(total_article_link))
# 寫一個迴圈把所有文章連結跑一遍
for(k in seq_along(total_article_link)) {
true_url <- paste0(base_url, total_article_link[k])
doc <- read_html(true_url)
# 選取文章的區塊
content <- html_node(doc, "#summary")
# 把文章文字拿出來
content_text <- html_text(content)
# 把文章放到先前生成的空串列
total_content[[k]] <- content_text
}
# 由於這次抓下來的內容是json格式,我們要使用jsonlite
library(jsonlite)
# 取得真正網址的內容
url <- "https://rent.591.com.tw/home/search/rsList?is_new_list=1&type=1&kind=0&searchtype=1®ion=1&firstRow=0&totalRows=9246"
json_content <- fromJSON(url)
# 把躲在json_content裡面,我們真的想要的租屋資訊拿出來
df <- json_content$data
df <- df$data
# 先生成間隔30的數列,length.out是數列的長度
steps <- seq(from = 0, by = 30, length.out = 20)
# 把網址中的firstRow數字取代成剛剛生成的數字
total_link <- paste0(url <- "https://rent.591.com.tw/home/search/rsList?is_new_list=1&type=1&kind=0&searchtype=1®ion=1&firstRow=",
steps,
"&totalRows=9246")
# 預先生成存放每一頁租屋資訊的串列
total_rent <- vector("list", length(total_link))
# 寫一個迴圈把20個頁面都跑一次
for(i in seq_along(total_link)) {
json_content <- fromJSON(total_link[i])
df <- json_content$data
df <- df$data
total_rent[[i]] <- df
}
# RSelenium是R用來模擬瀏覽器行為的package
library(RSelenium)
# 在使用RSelenium之前,需要先下載相關驅動
# 下載之後,把驅動程式放到電腦的PATH位置
# RSelenium可以使用許多種驅動,我使用的是Phantomjs
# 啟動驅動程式
pJS <- phantom()
# 手動等五秒讓驅動啟動
Sys.sleep(5)
# 開啟遠端瀏覽器,這裡使用的是phantomjs瀏覽器
remDr <- remoteDriver(browserName = 'phantomjs')
# 打開瀏覽器
remDr$open()
# 開啟網頁
remDr$navigate("https://member.jcic.org.tw/main_member/MorgageQuery.aspx")
# 看一下網頁的名稱
remDr$getTitle()[[1]]
# 選取一個要素
webElem <- remDr$findElement(using = 'css selector', "#ContentPlaceHolder1_F_BUILDING_CITY > option:nth-child(1)")
# 點它
webElem$clickElement()
...
# 最後在完成所有動作之後,可以抵達我們要的網頁狀態
# 在取得當前頁面的原始碼,並用rvest進行處理
df <- remDr$getPageSource()[[1]]