R語(yǔ)言快速數(shù)據(jù)抓取指南

本文較功利,旨在快速解決問(wèn)題

參考書(shū)籍:《基于R語(yǔ)言的自動(dòng)數(shù)據(jù)收集》

人大經(jīng)濟(jì)論壇下載,中/英文

相關(guān)的庫(kù)

XML、rvest、httr、Rselenium、rdom(神器)、 RCurl
輔助庫(kù):tidyverse

基本流程

  1. 首先嘗試靜態(tài)網(wǎng)頁(yè)抓取(rvest)
  2. 如果搞不定,那就是javascript搞的鬼,可以用rdom解決之
  3. 先爬一個(gè)網(wǎng)頁(yè),找出規(guī)律,再構(gòu)造通用架構(gòu)。注意爬蟲(chóng)并不快...

靜態(tài)網(wǎng)頁(yè)

url <- "http://jnwater.jinan.gov.cn/col/col22802/index.html?
Fuid=56254&pageNum=2"
#這個(gè)網(wǎng)頁(yè)有濟(jì)南的泉水?dāng)?shù)據(jù),最后一個(gè)參數(shù)是js生成的換頁(yè)參數(shù)
webpage <- read_html(url, encoding="utf-8")
#讀取頁(yè)面內(nèi)容,編碼這里不一定,視實(shí)際情況決定
data_html <- html_nodes(webpage, '.bt-neirong')
#在眾多節(jié)點(diǎn)中返回我們要的那個(gè)(些)
x <- html_text(data_html)
#讓它說(shuō)人話(huà)

接下來(lái)我們可以用正則表達(dá)式愉快地提取內(nèi)容了

Tips

這里介紹兩個(gè)常用的技巧

  1. 用谷歌瀏覽器,按F12進(jìn)入開(kāi)發(fā)者模式閱讀源碼。
  2. 安裝SelectorGadget,可以實(shí)現(xiàn)指哪打哪。(有時(shí)候也不好用)
    這里是為了找到html_nodes(webpage, '.bt-neirong')那個(gè)第二個(gè)參數(shù)。

問(wèn)題

經(jīng)過(guò)篩選,我們拿到了一頁(yè)的數(shù)據(jù)。然而,問(wèn)題并沒(méi)有結(jié)束。事實(shí)上,我們拿到的是第一頁(yè)的數(shù)據(jù),即http://jnwater.jinan.gov.cn/col/col22802/index.html?Fuid=56254&pageNum=1的。不管我們?cè)趺锤淖儏?shù),我們的爬蟲(chóng)能看見(jiàn)的也就只有這一頁(yè)。但是瀏覽器卻能看到,這是為什么呢?
原因在于這個(gè)參數(shù)是javascript生成的,我們直接爬多半搞不定。

動(dòng)態(tài)網(wǎng)頁(yè)

接上面的問(wèn)題,我千辛萬(wàn)苦終于發(fā)現(xiàn)了一個(gè)庫(kù):rdom
這個(gè)庫(kù)很厲害,基本包打天下。但是有一點(diǎn)需要注意,這個(gè)庫(kù)需要安裝無(wú)頭瀏覽器phantomjs無(wú)頭瀏覽器。我們下載瀏覽器,解壓后是個(gè)文件夾,在\bin里有個(gè)exe文件,就是它了。這時(shí)我們需要配置環(huán)境變量,i.e. 在path里面添加一個(gè)路徑(到\bin就可以)。

環(huán)境變量簡(jiǎn)介

至于什么是環(huán)境變量,也就是一個(gè)程序快速啟動(dòng)的索引。我們不愿意在打開(kāi)任何程序時(shí)都先進(jìn)入它的工作路徑,但是一般來(lái)說(shuō)你不這樣就打不開(kāi)。于是我們把路徑添加到環(huán)境變量里去,在執(zhí)行命令時(shí)電腦會(huì)搜索當(dāng)前工作環(huán)境以及系統(tǒng)變量指示的路徑,這就可以高枕無(wú)憂(yōu)了。

rdom

一切準(zhǔn)備就緒后,安裝rdom。只能從github上安裝。

stopifnot(Sys.which("phantomjs") != "")
# 檢測(cè)系統(tǒng)路徑中是否含有phantomjs,若未下載,或已下載但未添加系統(tǒng)路徑都會(huì)導(dǎo)致報(bào)錯(cuò)。什么也沒(méi)發(fā)生就成功了。
devtools::install_github("cpsievert/rdom")
# 安裝rdom
library(rdom)
library(XML)
library(tidyverse)
M <- list()
for (j in 1:164) {
  url <- 'http://jnwater.jinan.gov.cn/col/col22802/index.html?uid=56254&pageNum='
  url <- paste(url, j, sep = '')
  x <- rdom(url) %>% readHTMLTable(header = T)
  #后面那個(gè)函數(shù)是XML里面的
  y <- x[[3]] %>% .[2:16, 1:3]
  M[[j]] <- y
}

程序跑的挺慢的,大約一個(gè)半小時(shí)才完成?,F(xiàn)在列表中已經(jīng)存好了泉水水位數(shù)據(jù)。
基本上這個(gè)套路可以解決絕大多數(shù)問(wèn)題了,但是這畢竟是個(gè)功利的玩法。想打好內(nèi)力還是得看書(shū),學(xué)TCP/IP這里。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,867評(píng)論 1 45
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,224評(píng)論 3 119
  • 生活工作中,專(zhuān)注是最重要的,要明白自己要做什么事,而不是被別的事情帶走。比如你要看這本書(shū),可是拿著手機(jī)看著別的好玩...
    cai彩閱讀 311評(píng)論 0 0
  • 今天在中級(jí)班里,邀約到D老師和L老師進(jìn)行咨詢(xún)實(shí)戰(zhàn),我作為咨詢(xún)師,陪伴來(lái)訪(fǎng)者一個(gè)半小時(shí)。來(lái)訪(fǎng)者從的糾結(jié)和沉重的語(yǔ)氣,...
    息縣心協(xié)沐風(fēng)f閱讀 346評(píng)論 0 1
  • 物是人非,喂!不要生活在回憶了! 畢業(yè)了,我們一直想掙脫的學(xué)校包袱,今天終于脫掉了,但是,心情卻沒(méi)有輕松,卻更加空...
    嘿慕霏閱讀 227評(píng)論 0 1

友情鏈接更多精彩內(nèi)容