使用R从aspx网页中提取数据

时间:2018-03-06 21:55:05

标签: r import web-scraping

我想从'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)

1 个答案:

答案 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")
}