的HTML是不因爲大多數瀏覽器在讀取HTML時會對HTML進行標準化,所以當您嘗試從「Inspect Element」視圖提供XPath時,必須小心。因此,Firefox,Chrome(等)可能會顯示一個不錯的table > tbody > tr > ...
結構但頁面上可能不存在tbody
標籤。
library(rvest)
URL <- "http://karakterstatistik.stads.ku.dk/Histogram/ASOB05038E/Summer-2015"
pg <- read_html(URL)
html_nodes(pg, xpath=".//form[@id='karsumForm']/table/tr[8]/td[2]") %>%
html_text() %>%
trimws()
## [1] "115"
您可以在代碼片段上pg
使用在大多數瀏覽器view-source
看到純粹的HTML源或devtools::install_github("hrbrmstr/xmlview")
做xmlview::xml_view(pg)
上面看到從該網站原始的HTML(有一個模式在我xmlview
包也可以測試XPath篩選器)。
如果有非重複「命名字段」,那麼你可以這樣做:
get_val <- function(x, label) {
xpath <- sprintf(".//table/tr/td[contains(., '%s')][1]/following-sibling::td", label)
html_nodes(x, xpath=xpath) %>% html_text() %>% trimws()
}
get_val(pg, "Fakultet")
## [1] "Det Samfundsvidenskabelige Fakultet"
get_val(pg, "Institut")
## [1] "Sociologisk Institut"
get_val(pg, "Termin")
## [1] "s15"
get_val(pg, "ECTS")
## [1] "15"
get_val(pg, "Andre versioner") %>% gsub("[[:space:]]+", ", ", .)
## [1] "s16, v15, s14, s13, s12, s11"
可以有所應對的DUP:
get_val(pg, "Antal tilmeldte")
## [1] "115" "" "Antal tilmeldte" "11"
但它可能不會是完美的。
如果你磨練你的XPath技能,你可以獲得更多的目標(我不會再發布這個答案)。
雖然你沒有使用'rselenium',但是... –
不,我知道,但我用它的鏈接列表,我想知道如果我可以用它來刮。你有建議如何去做? – rfairy
_technically_這不是一個錯誤信息。它只是'xml_nodeset'類的默認打印方法,讓您知道'html_nodes()'調用的結果值中有0個元素。 – hrbrmstr