資料有多種可能來源,包括:
R可讀入許多其他格式的檔案:
readr (Wickham, Hester, and Francois 2018) package提供完整的文字檔讀取功能,各讀取函數的第一個參數通常為檔案路徑與名稱,read_delim()函數可用來讀取所有用分隔符號分隔的文字檔案,以tab分隔為例,只需將delim參數設定為即可用tab將各欄位分開讀取。此外,col_names參數也常被使用,TRUE代表資料內有包含欄位名稱(通常在首列),預設為TRUE,如果設定為FALSE,欄位名稱則會依順序被設定為 X1, X2, X3 …。
參數整理如下 (可用?read_delim指令閱讀官方說明):
- read_delim()
- read_csv()
- read_excel()
- readRDS() R物件有檔案小與讀取快速的優點
除了檔案的資料介面,在網際網路中為了方便傳輸資料,資料在傳遞前都會進行序列化(serialize),json、soap、binary和xml都是經常選擇的格式。
常遇到具有REST Api Http服務的資料集提供者,其中json格式大概是目前最常見的選擇,2016這年頭SQL Server也支援json儲存了,未來我們應該有許多機會常和json格式碰到面,今天來複習JSON(JavaScript Object Notation)格式載入。
# install.packages("jsonlite")
library(jsonlite)
data_json <- fromJSON("https://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=f4f80730-df59-44f9-bfb8-32c136b1ae68")
str(data_json)
## List of 1
## $ result:List of 5
## ..$ limit : int 1000
## ..$ offset : int 0
## ..$ count : int 24474
## ..$ sort : chr ""
## ..$ results:'data.frame': 1000 obs. of 6 variables:
## .. ..$ 平均(元 / 公斤): chr [1:1000] "61.33" "70.00" "380.00" "45.00" ...
## .. ..$ 品名 : chr [1:1000] "蘿蔔" "胡蘿蔔" "青蔥 " "蕹菜(空心菜) " ...
## .. ..$ 市場 : chr [1:1000] "士東" "士東" "士東" "士東" ...
## .. ..$ 日期 : chr [1:1000] "2019-01-01" "2019-01-01" "2019-01-01" "2019-01-01" ...
## .. ..$ 種類 : chr [1:1000] "蔬菜" "蔬菜" "蔬菜" "蔬菜" ...
## .. ..$ _id : int [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
data <- data_json[["result"]] [["results"]]
str(data)
## 'data.frame': 1000 obs. of 6 variables:
## $ 平均(元 / 公斤): chr "61.33" "70.00" "380.00" "45.00" ...
## $ 品名 : chr "蘿蔔" "胡蘿蔔" "青蔥 " "蕹菜(空心菜) " ...
## $ 市場 : chr "士東" "士東" "士東" "士東" ...
## $ 日期 : chr "2019-01-01" "2019-01-01" "2019-01-01" "2019-01-01" ...
## $ 種類 : chr "蔬菜" "蔬菜" "蔬菜" "蔬菜" ...
## $ _id : int 1 2 3 4 5 6 7 8 9 10 ...
head(data, 10)
## 平均(元 / 公斤) 品名
## 1 61.33 蘿蔔
## 2 70.00 胡蘿蔔
## 3 380.00 青蔥
## 4 45.00 蕹菜(空心菜)
## 5 45.00 青江白菜
## 6 95.00 胡瓜
## 7 95.00 絲瓜
## 8 61.33 蘿蔔
## 9 70.00 胡蘿蔔
## 10 380.00 青蔥
## 市場 日期 種類 _id
## 1 士東 2019-01-01 蔬菜 1
## 2 士東 2019-01-01 蔬菜 2
## 3 士東 2019-01-01 蔬菜 3
## 4 士東 2019-01-01 蔬菜 4
## 5 士東 2019-01-01 蔬菜 5
## 6 士東 2019-01-01 蔬菜 6
## 7 士東 2019-01-01 蔬菜 7
## 8 士東 2019-01-02 蔬菜 8
## 9 士東 2019-01-02 蔬菜 9
## 10 士東 2019-01-02 蔬菜 10
1.update_date : 日期 2.update_time : 時間 3.qua_id : 監控站ID 4.code_name : 監控站名稱 5.longitude : 經度 6.latitude: 緯度 7.qua_cntu: 濁度(NTU) 8.qua_cl: 餘氯(mg/L) 9.qua_ph: 酸度(pH) 10.偵測值-9係維修中,暫停偵測。
data_json <- fromJSON("https://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=190796c8-7c56-42e0-8068-39242b8ec927")
str(data_json)
## List of 1
## $ result:List of 5
## ..$ limit : int 1000
## ..$ offset : int 0
## ..$ count : int 93
## ..$ sort : chr ""
## ..$ results:'data.frame': 93 obs. of 10 variables:
## .. ..$ update_date: chr [1:93] "2020-03-18" "2020-03-18" "2020-03-18" "2020-03-18" ...
## .. ..$ update_time: chr [1:93] "19:00:00 " "19:00:00 " "19:00:00 " "19:00:00 " ...
## .. ..$ qua_ph : chr [1:93] "7.3" "7.1" "7.2" "7" ...
## .. ..$ longitude : chr [1:93] "121.569433" "121.55231" "121.563886" "121.544384" ...
## .. ..$ qua_id : chr [1:93] "CS00 " "CS01 " "CS02 " "CS03 " ...
## .. ..$ qua_cntu : chr [1:93] "0.01" "0.02" "0.07" "0.14" ...
## .. ..$ code_name : chr [1:93] "雙溪淨水場" "衛理女中" "雙溪國小 " "華興加壓站" ...
## .. ..$ latitude : chr [1:93] "25.114194" "25.101757" "25.106069" "25.099517" ...
## .. ..$ qua_cl : chr [1:93] "0.63" "0.58" "0.62" "0.5" ...
## .. ..$ _id : int [1:93] 1 2 3 4 5 6 7 8 9 10 ...
data_water <- data_json[["result"]] [["results"]]
str(data_water)
## 'data.frame': 93 obs. of 10 variables:
## $ update_date: chr "2020-03-18" "2020-03-18" "2020-03-18" "2020-03-18" ...
## $ update_time: chr "19:00:00 " "19:00:00 " "19:00:00 " "19:00:00 " ...
## $ qua_ph : chr "7.3" "7.1" "7.2" "7" ...
## $ longitude : chr "121.569433" "121.55231" "121.563886" "121.544384" ...
## $ qua_id : chr "CS00 " "CS01 " "CS02 " "CS03 " ...
## $ qua_cntu : chr "0.01" "0.02" "0.07" "0.14" ...
## $ code_name : chr "雙溪淨水場" "衛理女中" "雙溪國小 " "華興加壓站" ...
## $ latitude : chr "25.114194" "25.101757" "25.106069" "25.099517" ...
## $ qua_cl : chr "0.63" "0.58" "0.62" "0.5" ...
## $ _id : int 1 2 3 4 5 6 7 8 9 10 ...
head(data_water)
## update_date update_time qua_ph longitude qua_id qua_cntu
## 1 2020-03-18 19:00:00 7.3 121.569433 CS00 0.01
## 2 2020-03-18 19:00:00 7.1 121.55231 CS01 0.02
## 3 2020-03-18 19:00:00 7.2 121.563886 CS02 0.07
## 4 2020-03-18 19:00:00 7 121.544384 CS03 0.14
## 5 2020-03-18 19:00:00 7.3 121.547873 CX00 0.02
## 6 2020-03-18 19:00:00 7.5 121.563997 CX02 0.07
## code_name latitude qua_cl _id
## 1 雙溪淨水場 25.114194 0.63 1
## 2 衛理女中 25.101757 0.58 2
## 3 雙溪國小 25.106069 0.62 3
## 4 華興加壓站 25.099517 0.5 4
## 5 長興淨水場 25.014511 0.66 5
## 6 市政大樓 25.037531 0.33 6
myjson <- toJSON(iris, pretty=TRUE)
str(myjson)
## 'json' chr "[\n {\n \"Sepal.Length\": 5.1,\n \"Sepal.Width\": 3.5,\n \"Petal.Length\": 1.4,\n \"Petal.Width\":"| __truncated__
(Application Programming Interface,簡稱:API),可以視為應用程式之間溝通的窗口,藉由這個窗口取得/提供對方的服務, API就像一台販賣機,使用API的人不用知道販賣機底層如何運作(黑箱的概念),只要取用所需要的服務即可。換句話說, API沒有提供的服務, 使用者因為不知道黑箱裏面的運作,就不能取用。
一個標準API基本上有3個要素構成
MVC是一種軟體工程的開發概念, 分成3個部份:
Model, 與資料庫相關, 考慮資料如何存取
View, HTML, CSS, template
Controller, 處理使用者的請求, 取得資料, 回應給使用者
Request methods: HTTP allows GET, PUT, POST, DELETE methods, etc. Among them,
我們平日所使用的瀏覽器是在進行GET請求(request),得到訊息後瀏覽器再以我們可理解文字圖像呈現在眼前。
Response content常見有以下三種格式:
文字,XML:網址回傳一個文字檔時。
JSON:網址回傳一串文字資訊,如REST API。
Binary:網址回傳一個「非文字檔」。
library(httr)
res <- GET("https://www.ntpu.edu.tw")
head(res$content) # 網頁內容(已編碼,要進一步還原成可理解內容)
## [1] 3c 48 54 4d 4c 3e
透過這串 URL,瀏覽器可以找到放在 Web Server 裡的 HTML 頁面,CSS 文檔,圖像等,然後瀏覽器再 rendering 出來給使用者看。
curl (client URL): a command-line tool for getting or sending data including files using URL syntax. (讓個人電腦也可以進行各網路通訊協定的資訊交換。)
R裡用httr來操作curl的套件。
httpbinrhcurl <- "curl 'https://httpbin.org/headers' -H 'pragma: no-cache' -H 'accept-encoding: gzip, deflate, sdch' -H 'accept-language: en-US,en;q=0.8' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.39 Safari/537.36' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'cache-control: no-cache' -H 'referer: https://httpbin.org/' --compressed"
# 儲存response message
responseMessage <-
httpbinrhcurl %>% # 原始curl語法
stringr::str_c(collapse="") %>% # 把curl command合成一行
stringr::str_replace_all("\\\\","") %>% # 去除換行符號 \
straighten() %>% # 取出httr所需資訊
make_req() %T>% # 翻譯成httr對應的HTTP verb呼叫方式
{assign("requestMessage", ., envir = globalenv())} %>% # 存在requestMessage
{.[[1]]()} # 執行request
## curl 'https://httpbin.org/headers' -H 'pragma: no-cache' -H 'accept-encoding: gzip, deflate, sdch' -H 'accept-language: en-US,en;q=0.8' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.39 Safari/537.36' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'cache-control: no-cache' -H 'referer: https://httpbin.org/' --compressed
## Error in error_interactive() :
## To run write_clip() in non-interactive mode, either call write_clip() with allow_non_interactive = TRUE, or set the environment variable CLIPR_ALLOW=TRUE
# Request有時可能會失敗,但成功的話responseMessage$status_code會是200.
responseMessage$status_code
## [1] 200
str(responseMessage)
## List of 10
## $ url : chr "https://httpbin.org/headers"
## $ status_code: int 200
## $ headers :List of 7
## ..$ date : chr "Wed, 18 Mar 2020 11:07:13 GMT"
## ..$ content-type : chr "application/json"
## ..$ content-length : chr "631"
## ..$ connection : chr "keep-alive"
## ..$ server : chr "gunicorn/19.9.0"
## ..$ access-control-allow-origin : chr "*"
## ..$ access-control-allow-credentials: chr "true"
## ..- attr(*, "class")= chr [1:2] "insensitive" "list"
## $ all_headers:List of 1
## ..$ :List of 3
## .. ..$ status : int 200
## .. ..$ version: chr "HTTP/1.1"
## .. ..$ headers:List of 7
## .. .. ..$ date : chr "Wed, 18 Mar 2020 11:07:13 GMT"
## .. .. ..$ content-type : chr "application/json"
## .. .. ..$ content-length : chr "631"
## .. .. ..$ connection : chr "keep-alive"
## .. .. ..$ server : chr "gunicorn/19.9.0"
## .. .. ..$ access-control-allow-origin : chr "*"
## .. .. ..$ access-control-allow-credentials: chr "true"
## .. .. ..- attr(*, "class")= chr [1:2] "insensitive" "list"
## $ cookies :'data.frame': 0 obs. of 7 variables:
## ..$ domain : logi(0)
## ..$ flag : logi(0)
## ..$ path : logi(0)
## ..$ secure : logi(0)
## ..$ expiration: 'POSIXct' num(0)
## ..$ name : logi(0)
## ..$ value : logi(0)
## $ content : raw [1:631] 7b 0a 20 20 ...
## $ date : POSIXct[1:1], format: "2020-03-18 11:07:13"
## $ times : Named num [1:6] 0 0.000854 0.210167 0.612742 0.812958 ...
## ..- attr(*, "names")= chr [1:6] "redirect" "namelookup" "connect" "pretransfer" ...
## $ request :List of 7
## ..$ method : chr "GET"
## ..$ url : chr "https://httpbin.org/headers"
## ..$ headers : Named chr [1:10] "application/json, text/xml, application/xml, */*" "" "no-cache" "gzip, deflate, sdch" ...
## .. ..- attr(*, "names")= chr [1:10] "Accept" "Content-Type" "pragma" "accept-encoding" ...
## ..$ fields : NULL
## ..$ options :List of 4
## .. ..$ useragent : chr "libcurl/7.64.1 r-curl/4.3 httr/1.4.1"
## .. ..$ post : logi TRUE
## .. ..$ postfieldsize: int 0
## .. ..$ httpget : logi TRUE
## ..$ auth_token: NULL
## ..$ output : list()
## .. ..- attr(*, "class")= chr [1:2] "write_memory" "write_function"
## ..- attr(*, "class")= chr "request"
## $ handle :Class 'curl_handle' <externalptr>
## - attr(*, "class")= chr "response"
<breakfast_menu>
, <price>
</breakfast_menu>
,</price>
<line-break />
<name>Belgian Waffles</name>
<book category="web">
(book標籤底下附帶category屬性,其值為web)
舉例來說,若我們要用XML來記載課程的資訊,記載方式可以如下:**"<course>DataScienceAndR</course><title>RDataEngineer-02-XML</title><author>Wush Wu</author>"**
用<>框起來的文字代表標籤,上述文件中共有三個標籤:course、title和author。以course標籤為例,標籤的開始是<course>
,結束則是</course>
,會多一個“/”記號。透過這些標籤,電腦可以清楚的知道DataScienceAndR代表的是course,RDataEngineer-02代表的是title,而Wush Wu代表的是author。 對電腦而言,標籤與內容很清楚地被分開了,不會被混淆。
XML的文件中,標籤可以有結構關係。 文件作範例: '<tr> <th class="T11b" bgcolor="#ffdd83" align="left" valign="middle" width="200">廠商名稱</th> <td class="newstop" bgcolor="#EFF1F1">台灣翔登股份有限公司</td> </tr>'
挖掘網頁資訊的三步驟:1. 找到標籤(label) 2. 查詢屬性(attr) 3.檢查內容(文字、連結、圖片)。
# install.packages("XML")
library(XML)
library(httr)
waterQ <- xmlParse(
GET("http://data.taipei/opendata/datalist/datasetMeta/download?id=961ca397-4a59-45e8-b312-697f26b059dc&rid=190796c8-7c56-42e0-8068-39242b8ec927"), encoding = "UTF-8")
#因為XML套件處理http轉https的功能的不好,先使用GET()功能取用網址,再放入xmlParse()就不會有問題。
#取得所有"code_name"標籤內的資料
xpathSApply(waterQ, "//code_name", xmlValue)[1:10]
## [1] "雙溪淨水場" "衛理女中"
## [3] "雙溪國小 " "華興加壓站"
## [5] "長興淨水場" "市政大樓"
## [7] "市議會" "捷運忠孝復興站"
## [9] "南港高工" "南港加壓站"
#取得各監測站的經度
xpathSApply(waterQ, "//longitude", xmlValue)[1:10]
## [1] "121.569433" "121.55231" "121.563886" "121.544384" "121.547873"
## [6] "121.563997" "121.561975" "121.54342" "121.607462" "121.616217"
- //: 任意位置子結點資料,e.g.所有連結標籤: //a , /a
- @: 屬性資料,e.g.所有連結標籤內的連結網址: //a/@href , /a[@href]
# install.packages("xml2")
library(xml2)
waterQ <- read_xml("http://data.taipei/opendata/datalist/datasetMeta/download?id=961ca397-4a59-45e8-b312-697f26b059dc&rid=190796c8-7c56-42e0-8068-39242b8ec927", encoding = "UTF-8")
xml_find_all(waterQ, "//code_name")
## {xml_nodeset (93)}
## [1] <code_name>雙溪淨水場</code_name>
## [2] <code_name>衛理女中</code_name>
## [3] <code_name>雙溪國小 </code_name>
## [4] <code_name>華興加壓站</code_name>
## [5] <code_name>長興淨水場</code_name>
## [6] <code_name>市政大樓</code_name>
## [7] <code_name>市議會</code_name>
## [8] <code_name>捷運忠孝復興站</code_name>
## [9] <code_name>南港高工</code_name>
## [10] <code_name>南港加壓站</code_name>
## [11] <code_name>挹翠加壓站</code_name>
## [12] <code_name>敦化國中 </code_name>
## [13] <code_name>信義運動中心</code_name>
## [14] <code_name>信義區公所</code_name>
## [15] <code_name>大安運動中心</code_name>
## [16] <code_name>南港運動中心</code_name>
## [17] <code_name>公館淨水場</code_name>
## [18] <code_name>捷運台北車站</code_name>
## [19] <code_name>捷運中正紀念堂站</code_name>
## [20] <code_name>萬華國中</code_name>
## ...
#取得所有"code_name"標籤內的資料
code_name <- xml_find_all(waterQ, "//code_name") %>%
xml_text()
code_name[1:10]
## [1] "雙溪淨水場" "衛理女中"
## [3] "雙溪國小 " "華興加壓站"
## [5] "長興淨水場" "市政大樓"
## [7] "市議會" "捷運忠孝復興站"
## [9] "南港高工" "南港加壓站"
#取得各監測站的經度longitude
longitude <- xml_find_all(waterQ, "//longitude") %>%
xml_text()
longitude[1:10]
## [1] "121.569433" "121.55231" "121.563886" "121.544384" "121.547873"
## [6] "121.563997" "121.561975" "121.54342" "121.607462" "121.616217"
由於不是每個網站都提供API,但網頁上卻有你想要分析的資料(像是ptt推文!?),除了人工複製貼上以外,也可以將網頁處理程式化,以程式化的方式擷取網頁資料就叫做網頁爬蟲(Webscraping)。
在R中可以
此外,網頁爬蟲可能耗費很多網頁流量和資源,所以在許多網站被視為非法行為,如果一次讀太多太快,很可能被鎖IP。
#以東華應數系網站為例,可直接逐行讀取 readLines()
# readLines(file("https://am.ndhu.edu.tw/", encoding = "UTF-8"), n = 10)
htmlCode <- readLines(file("https://am.ndhu.edu.tw/p/412-1038-2920.php?Lang=zh-tw", encoding = "UTF-8"))
htmlCode[1:10]
## [1] "<!DOCTYPE html>"
## [2] "<html lang=\"zh-tw\">"
## [3] "<head>"
## [4] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
## [5] "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\" />"
## [6] "<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=1, minimum-scale=1.0, maximum-scale=3.0\">"
## [7] "<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">"
## [8] "<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">"
## [9] "<meta name=\"keywords\" content=\"請填寫網站關鍵記事,用半角逗號(,)隔開\" />"
## [10] "<meta name=\"description\" content=\"請填寫網站簡述\" />"
str(htmlCode)
## chr [1:1436] "<!DOCTYPE html>" "<html lang=\"zh-tw\">" "<head>" ...
grep("<a href=", htmlCode, value = T)[1:6]
## [1] "<a href=\"#start-C\" class=\"focusable\" title=\"跳到主要內容區塊\">跳到主要內容區塊</a>"
## [2] "\t\t\t\t<li id=\"Hln_3047\" class=\"dropdown\"><a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"javascript:void(0)\" title=\"招生\">招生</a><ul class=\"dropdown-menu\"><li id=\"Hln_3048\"><a href=\"/p/412-1038-17033.php?Lang=zh-tw\" title=\"招生宣言\">招生宣言</a></li><li id=\"Hln_3049\"><a href=\"https://exam.ndhu.edu.tw/index.php\" target=\"_blank\" title=\"招生訊息(另開新視窗)\">招生訊息</a></li><li id=\"Hln_3050\"><a href=\"https://epage.ndhu.edu.tw/files/11-1000-9758.php?Lang=zh-tw\" target=\"_blank\" title=\"東華學生(另開新視窗)\">東華學生</a></li><li id=\"Hln_3051\"><a href=\"/p/412-1038-17308.php?Lang=zh-tw\" title=\"畢業校友見證\">畢業校友見證</a></li></ul></li>"
## [3] "\t\t\t\t<li id=\"Hln_3052\" class=\"dropdown\"><a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"javascript:void(0)\" title=\"簡介\">簡介</a><ul class=\"dropdown-menu\"><li id=\"Hln_3053\"><a href=\"/p/412-1038-4351.php?Lang=zh-tw\" title=\"歷史沿革\">歷史沿革</a></li><li id=\"Hln_3054\"><a href=\"/p/412-1038-4352.php?Lang=zh-tw\" title=\"發展方向\">發展方向</a></li><li id=\"Hln_3055\"><a href=\"/p/412-1038-5213.php?Lang=zh-tw\" title=\"教育目標\">教育目標</a></li><li id=\"Hln_3056\"><a href=\"/p/412-1038-4353.php?Lang=zh-tw\" title=\"進修與就業\">進修與就業</a></li><li id=\"Hln_3057\"><a href=\"/p/412-1038-4354.php?Lang=zh-tw\" title=\"系所設備\">系所設備</a></li></ul></li>"
## [4] "\t\t\t\t<li id=\"Hln_3059\" class=\"dropdown\"><a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"javascript:void(0)\" title=\"成員\">成員</a><ul class=\"dropdown-menu\"><li id=\"Hln_3060\"><a href=\"/p/412-1038-2920.php?Lang=zh-tw\" title=\"師資\">師資</a></li><li id=\"Hln_3061\"><a href=\"/p/412-1038-17041.php?Lang=zh-tw\" title=\"助理\">助理</a></li></ul></li>"
## [5] "\t\t\t\t<li id=\"Hln_3423\" class=\"dropdown\"><a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"javascript:void(0)\" title=\"課程資訊\">課程資訊</a><ul class=\"dropdown-menu\"><li id=\"Hln_3424\"><a href=\"/p/412-1038-6069.php?Lang=zh-tw\" title=\"聯合微積分教學\">聯合微積分教學</a></li><li id=\"Hln_3425\"><a href=\"/p/412-1038-2929.php?Lang=zh-tw\" title=\"開課課程表\">開課課程表</a></li><li id=\"Hln_3571\"><a href=\"/p/412-1038-2930.php?Lang=zh-tw\" title=\"課程及學程規劃\">課程及學程規劃</a></li><li id=\"Hln_3572\"><a href=\"/p/412-1038-2931.php?Lang=zh-tw\" title=\"課程大綱\">課程大綱</a></li><li id=\"Hln_3573\"><a href=\"/p/412-1038-2932.php?Lang=zh-tw\" title=\"教學計畫表\">教學計畫表</a></li><li id=\"Hln_3574\"><a href=\"/p/412-1038-2933.php?Lang=zh-tw\" title=\"Office Hour\">Office Hour</a></li><li id=\"Hln_3575\"><a href=\"/p/412-1038-2934.php?Lang=zh-tw\" title=\"導師時間表\">導師時間表</a></li><li id=\"Hln_3576\"><a href=\"/p/412-1038-8904.php?Lang=zh-tw\" title=\"電腦教室使用狀況\">電腦教室使用狀況</a></li><li id=\"Hln_3577\"><a href=\"http://faculty.ndhu.edu.tw/~yltseng/help.html\" target=\"_blank\" title=\"數學小天地(另開新視窗)\">數學小天地</a></li></ul></li>"
## [6] "\t\t\t\t<li id=\"Hln_3582\" class=\"dropdown\"><a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"/p/412-1038-3013.php?Lang=zh-tw\" title=\"學程化及未來方向\">學程化及未來方向</a><ul class=\"dropdown-menu\"><li id=\"Hln_3583\"><a href=\"/p/412-1038-3015.php?Lang=zh-tw\" title=\"學程化\">學程化</a></li><li id=\"Hln_3584\"><a href=\"/p/412-1038-4989.php?Lang=zh-tw\" title=\"未來方向\">未來方向</a></li><li id=\"Hln_3585\"><a href=\"/p/412-1038-8450.php?Lang=zh-tw\" title=\"課程關係圖及課程地圖\">課程關係圖及課程地圖</a></li><li id=\"Hln_3586\"><a href=\"/p/412-1038-5214.php?Lang=zh-tw\" title=\"專業能力指標\">專業能力指標</a></li></ul></li>"
ndhuAM <- read_html("https://am.ndhu.edu.tw/p/412-1038-2920.php?Lang=zh-tw")
xml_find_all(ndhuAM, "//html")
## {xml_nodeset (1)}
## [1] <html lang="zh-tw">\n<head>\n<meta http-equiv="Content-Type" content="tex ...
xml_find_all(ndhuAM, "//*[contains(concat(' ', @class, ' '), concat(' ', 'mcol',' '))]") %>% xml_text()
## [1] "\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\n\n\n\t師資\n\n \n\n\n\n\n\t\n\t\t\n \t\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\n\n\n\n\n\n\t\t\n\t\n\n\n\n\n\n\n\t\n\t\n\t\t\n\t\t\n\n標題\n\n\t\t職稱\n\n\t\t研究領域\n\n\t\t電話\n\n\t\tE-MAIL\n\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t王立中\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t代數幾何、泛函分析、密碼學\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903529\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tlcwang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t王昆<U+6E76>\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t富氏分析、調和分析、小波分析\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903555\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tkcwang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t王家禮\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t作業研究、排隊理論\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903515\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tcwang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t朱至剛\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t無母數迴歸、時間序列分析\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903536\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tchu@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t吳建銘\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t系主任-教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t類神經網路、資訊技術應用\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903531\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tjmwu@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t周君彥\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t泛函分析、算子代數\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903557\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tchoucy@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t張菁華\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t古典、泛函分析\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903558\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tchchang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t曹振海\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t統計證據、穩健貝氏分析、統計機器學習\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903520\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tchtsao@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t郭大衛\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t組合數學、圖形理論、演算法\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903525\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tdavidk@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t黃延安\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t對局論、數理經濟\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903516\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tyahwang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t黃淑琴\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t複變數函數論、里曼曲面\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903530\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tshuang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t黃顯棟\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t量子資訊、算子理論、泛函分析\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903528\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tsdhuang@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t謝思民\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t經驗過程、大樣本理論、數理統計\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903524\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\ttse@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t吳韋瑩\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t副教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t空間統計\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903533\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\twuweiying1011@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t胡鍇\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t副教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tDNA幾何與拓樸\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903523\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tkhu@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t張子貴\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t副教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t數學教育、微積分教學、統計資料分析\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903560\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\ttzu@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t陳中壹\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t副教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t解析數論、分析、熱傳導方程式\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903556\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tjongyi@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t曾玉玲\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t副教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t數理統計、集合估計論、擬經驗貝氏方法\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903518\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\tyltseng@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t趙維雄\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t助理教授\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t生物統計、長期追蹤資料分析、隨機過程\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t03-8903519\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\twhchao@gms.ndhu.edu.tw\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n\t\t\n\t\t\n\n .page-goto,\n .mpgbar {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .mpgbar .input-group {\n max-width: 100px;\n }\n .mpgbar .form-control {\n text-align: center;\n }\n .mpgbar .pg-txt {\n padding: 6px 12px;\n }\n .mpgbar .pagination {\n display: block;\n }\n @media(max-width: 768px) {\n .mpgbar { flex-direction: column; }\n .mpgbar .pg-first,\n .mpgbar .pg-last,\n .mpgbar > .pg-txt {\n display: none;\n }\n }\n \n\t\n\n$(document).ready(function(){\nvar a = [];\na.push({name:'Cg',value:2920});\na.push({name:'IsTop',value:0});\nvar option = {\n\tpageMode:'0',\n\tcurrentPage:1,\n\tflag:0,\n\tover:0,\n\turl:'/app/index.php?Action=mobilecgmolist',\n\turlPrefix: 'https://am.ndhu.edu.tw/p/412-1038-2920-PAGE.php?Lang=zh-tw',\n\ttotalPage:1,\n\tOp:'getpartlist',\n\tparam:a,\n\tpageListObj:$(\"#pageptlist\"),\n\tnextPageObj:$(\"#_cgptlist_next_page\")\n}\nvar cgptlist = new HvPagelist();\ncgptlist.init(option);\n\n\n\n cgptlist.loadPage();\n window.onscroll = function(){\n cgptlist.loadPage();\n }\n\n});\n\n\n\t\t\t\t\t\n\t\t\t\t\t"
# #或是使用XML工具分析擷取網頁 (XML package),使用方法與XML檔案處理方法類似,搭配XPath語言,篩選所需資料
# html <- htmlParse("https://am.ndhu.edu.tw/")
# xpathSApply(html, "//ul", xmlValue)
# xpathSApply(html, "//span[@class='ptname ']", xmlValue)
# YahooNewsurl <- "https://tw.news.yahoo.com/topic/yahoo-today"
# read_html(YahooNewsurl) %>% html_nodes("#Col1-0-TopicWrapper-Proxy")%>% html_text()
# read_html(YahooNewsurl) %>% html_nodes("#Col1-0-TopicWrapper-Proxy div>div>span")%>% html_text()
# read_html(YahooNewsurl) %>% html_nodes(xpath = "//*[@id='ad-34813707356']")
# news_title <- read_html(YahooNewsurl) %>% html_nodes(".Mb(5px)") %>% html_text()
# news_url <- read_html(YahooNewsurl) %>% html_nodes(".tpl-title a") %>% html_attr("href")
# Yahoo_news <- data.frame(title = news_title, url=news_url)
# head(Yahoo_news)
Newsurl <- "https://www.twreporter.org/a/laughing-gas-nitrous-oxid-substance-abuse-hurt-youth-health"
articlebody <- read_html(Newsurl) %>%
html_nodes("#article-body div") %>% html_text()
article <- data.frame(content = articlebody)
a 是「標籤 tag 」,必須有左邊起始標籤和右邊結尾標籤包住中間的內容,像這樣: 中間的內容
id, class, href為標籤的屬性,屬性可以是任意的名稱,但其中 href 通常是 a 標籤底下放網頁連結的屬性。
id 和 class在 css中有特殊意義,一般爬蟲最常用這兩個屬性協助做定位。 照網頁設計的邏輯, id 在文件中只能出現一次;而 class 通常是讓網頁設計師用來指定一群相似內容的樣式,我們爬蟲要爬的內容一般和美術的規則也很接近。由於這兩個原因, id 和 class 很適合我們做定位。在 css 路徑中的代號id 的是 # , class 的是 . 。 > 用 css 路徑定位的話,我們可以用幾種方式告訴程式我們要範例中的 a 標籤:
CSS Selector 常見語法 參考資料
Newsurl <- "https://www.twreporter.org/a/laughing-gas-nitrous-oxid-substance-abuse-hurt-youth-health"
articlebody <- read_html(Newsurl) %>%
html_nodes("#article-body p") %>% html_text()
article <- data.frame(content = articlebody)
head(article)
## content
## 1 俗稱笑氣的一氧化二氮(N2O)原是半導體和食品加工等工業製程中,不可或缺的氣體原料,但這些年,原料卻悄悄流入市面,並被包裝成「派對助興」的催化劑。這無色微甜的便宜氣體,看似沒有立即成癮性,但2019年長庚醫院研究團隊發表報告,確診多名青少年因吸食笑氣而癱瘓的案例。
## 2 究竟笑氣為何在青少年間「流行」和被濫用?接手治療的醫師們怎麼看待笑氣在台灣被輕忽的危險,以及對青少年身心帶來的影響?
## 3 「我很喜歡那種ㄎㄧㄤ ㄎㄧㄤ的、很放鬆,可以暫時不想事情的感覺。」
## 4 21歲的小柔(化名)曾經很努力戒掉過大麻、海洛因,相信自己不會再掉入吸毒的陷阱裡,「笑氣與毒品不同啊,」又不是違禁品、也不會被警察抓,她和朋友都這樣想。但這一次,為了幾秒鐘的放鬆,她付出的代價,是險些癱瘓。
## 5 笑氣對他們來說,不過就像是菸酒,只是聚會時的助興工具。
## 6 一年多前,小柔迷上交友軟體,認識了一群愛吸食笑氣的朋友。初次聚會,小柔回憶,她看著朋友將氣球套在笑氣鋼瓶的氣嘴上,灌成比一般氣球大一倍的「笑氣氣球」。因為好奇,她跟著朋友將氣球放入口中,吸一次氣,竟迎來一陣短暫麻痺的快感。
articlebody <- read_html(Newsurl) %>%
html_nodes("#article-body") %>% html_nodes(".body__StyledParagraph-dwuu2m-16") %>% html_text()
articleB <- data.frame(content = articlebody)
head(articleB)
## content
## 1 「我很喜歡那種ㄎㄧㄤ ㄎㄧㄤ的、很放鬆,可以暫時不想事情的感覺。」
## 2 21歲的小柔(化名)曾經很努力戒掉過大麻、海洛因,相信自己不會再掉入吸毒的陷阱裡,「笑氣與毒品不同啊,」又不是違禁品、也不會被警察抓,她和朋友都這樣想。但這一次,為了幾秒鐘的放鬆,她付出的代價,是險些癱瘓。
## 3 笑氣對他們來說,不過就像是菸酒,只是聚會時的助興工具。
## 4 一年多前,小柔迷上交友軟體,認識了一群愛吸食笑氣的朋友。初次聚會,小柔回憶,她看著朋友將氣球套在笑氣鋼瓶的氣嘴上,灌成比一般氣球大一倍的「笑氣氣球」。因為好奇,她跟著朋友將氣球放入口中,吸一次氣,竟迎來一陣短暫麻痺的快感。
## 5 在酒店上班的小柔,面對同行競爭與惡言雜語,心中委屈與負面情緒無法發洩時,她便想起那幾秒鐘的放鬆感。「面對那些謠言,好像辯解也不是,不辯解也不對,因為沒人可以講,就想到可以靠著笑氣(排解)。」
## 6 在那個「忘憂」的世界裡,不必清醒地面對挫折,吸了就睡、醒了再吸,最多一天可以吸掉10公斤的笑氣,再倒頭大睡10多個小時。連續幾天後,她發現自己站不穩,無法正常走路。
articlebody <- read_html(Newsurl) %>%
html_nodes("#article-body") %>% html_nodes("h1") %>% html_text()
articleC <- data.frame(content = articlebody)
head(articleC)
## content
## 1 從ㄎㄧㄤ掉變癱掉:「毒害」年輕人的笑氣濫用
## 2 掉進笑氣陷阱的青少年們
## 3 被低估的「毒害」
## 4 將笑氣列為毒品,能解決問題嗎?