【问题标题】:Extract data from an aspx web page with R使用 R 从 aspx 网页中提取数据
【发布时间】:2018-03-06 21:55:05
【问题描述】:

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

【问题讨论】:

标签: r import web-scraping


【解决方案1】:

假设从网站上抓取数据并不违法,您可以考虑使用以下方法。

正如评论中提到的,您可以利用 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")
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2011-04-14
    • 2021-11-29
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多