我想从'aspx'页面提取数据(我不是网页格式的专家): http://www.ffvoile.fr/ffv/web/pratique/habitable/OSIRIS/table.aspx
更确切地说,我想提取每条船的信息,我们可以点击该行左侧的“信息”按钮。
我的问题是,在'aspx'页面的情况下,URL总是相同的,所以我不明白我如何访问每艘船的信息。
我知道如何从“标准”网页中提取数据,以便我需要修改以下代码(这些页面在“aspx”页面上显示类似但更有限的船只信息?)
library(rvest)
Url <- "http://www.ffvoile.fr/ffv/public/Application1/Habitable/HN_Detail.asp?Matricule=1"
Page <- read_html(Url)
Data <- Page %>%
html_nodes(".Valeur") %>% # I use SelectorGadget to highlights the relevant elements
html_text()
print(Data)
答案 0 :(得分:0)
假设从网站上抓取数据并不违法,您可以考虑使用以下内容。
如评论中所述,您可以利用Fiddler来确定正在发出的http请求是什么,并重复这些操作。
library(httr)
library(xml2)
website <- "http://www.ffvoile.fr/ffv/web/pratique/habitable/OSIRIS/table.aspx"
#get cookies and and view states
req <- GET(paste0(website, "/js"))
req_html <- read_html(rawToChar(req$content))
fields <- c("__VIEWSTATE","__VIEWSTATEGENERATOR","__VIEWSTATEENCRYPTED",
"__PREVIOUSPAGE", "__EVENTVALIDATION")
viewheaders <- lapply(fields, function(x) {
xml_attr(xml_find_first(req_html, paste0(".//input[@id='",x,"']")), "value")
})
names(viewheaders) <- fields
#post data request with index, i starting from 0. You can loop through each row using i
i <- 0
params <- c(viewheaders,
list(
"__EVENTTARGET"="ctl00$mainContentPlaceHolder$GridView_TH",
"__EVENTARGUMENT"=paste0("Select$", i),
"ctl00$mainContentPlaceHolder$DropDownList_classes"="TOUT",
"ctl00$mainContentPlaceHolder$TextBox_Bateau"="",
"ctl00$mainContentPlaceHolder$DropDownList_GR"="TOUT",
"hiddenInputToUpdateATBuffer_CommonToolkitScripts"=1))
resp <- POST(website, body=params, encode="form",
set_cookies(structure(cookies(req)$value, names=cookies(req)$name)))
if(resp$status_code == 200) {
writeLines(rawToChar(resp$content), "ffvoile.html")
shell("ffvoile.html")
}