您好,登錄后才能下訂單哦!
這篇文章主要介紹“R語言中如何使用RCurl包”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“R語言中如何使用RCurl包”文章能幫助大家解決問題。
這一段時間在研究R里面的數據抓取相關包,時不時的能發掘出一些驚喜。
比如今天,我找到了一個自帶請求器的解析包,而且還是嵌入的pantomjs無頭瀏覽器,這樣就不用你再傻乎乎的再去裝個selenium驅動,也不用借助任何請求器(RCurl或者httr)包就可以自動解析帶有js腳本的HTML文檔。
耳聽為虛,眼見為實,還記得之前講解表格數據抓取的那一節,遇到的天氣數據表格,里面的數據拿不到,有些棘手。害得我動用了RSelenium調用了plantomjs才得以解決,但是!
今天講解的這個包將所有的任務量縮減到一句代碼!
library("rvest") URL<-"https://www.aqistudy.cn/historydata/monthdata.php?city=北京" %>% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
大家可以試一試使用普通的請求方法是否可以成功獲取里面的表格(要是成功了算我輸!!!)
使用RCurl包請求!
header<-c("User-Agent"="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36") mytable <- getURL(URL,httpheader=header,.encoding="UTF-8") %>% htmlParse(encoding ="UTF-8") %>% readHTMLTable(header=TRUE) $`NULL` NULL
這是多大仇多大怨啊~_~
使用rvest試一試:
mytable <- URL %>% read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1) [1] 月份 AQI 范圍 質量等級 PM2.5 PM10 SO2 CO NO2 O3
恩,對,這次進步了,拿到了表頭,可是這有什么卵用!!!
使用selenium驅動瀏覽器
#java -jar D:/selenium-server-standalone-3.3.1.jar
#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)
start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")
post.url(URL)
mytable<-page_source() %>% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
這次總算拿到了!數一數寫了多少字的代碼!
有木有更加快捷的方法呢,當然有啦!
接下來瞪大眼睛看這一款神器!
使用rdom包:
stopifnot(Sys.which("phantomjs") != "")
#以上代碼檢測系統路徑中是否含有phantomjs瀏覽器
#如果沒有下載過phantomjs瀏覽器或者下載過但是沒有加入系統路徑,
#記得從新操作一下,否則一下函數無法運行!devtools::install_github("cpsievert/rdom")
#安裝rdom包(如果總是提示timeout的話,記得加載一下curl包)
library("rdom")
tbl <- rdom(URL) %>% readHTMLTable(header=TRUE) %>% `[[`(1)
有木有看清楚什么情況,沒有,已經完事兒,真的是只有一行代碼!
似不似,有點兒驚訝,rdom后臺調用了plantomjs瀏覽器渲染了整個html目標文檔(包含里面的所有script標簽里面的js動態腳本),所以readHTMLTable函數才有機會提取里面的表格(而這個過程,普通請求器比如RCurl或者httr都沒有權限辦到!),是不是很膩害呀!
下面這一句只是稍微修復一下編碼!
names(tbl) <- names(tbl) %>% stri_conv(from="utf-8") DT::datatable(tbl)
rdom是一個很小眾的包,但是它的設計理念有點兒逆天,整個包只有一個函數——rdom,和包名相同,它的工作只有一個,就是按照真實瀏覽器渲染HTML文檔的模式去渲染整個HTML文檔。在后臺調用plantomjs來處理渲染的過程,之后你可以自由的使用其他R中的高效快捷函數進行元素提取。
關于“R語言中如何使用RCurl包”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。