R - отправка веб-формы с помощью RVEST - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь очистить веб-сайт, на котором есть форма, в которой вы заполняете даты и отправляете.Тогда скачать CSV.

rm(list = ls())

library(rvest)


url <- "http://itc.aeso.ca/itc/public/queryHistoricalIntertieReport.do"

pgsession<-html_session(url)


pgform <- html_form(pgsession)[[1]]
filled_form<- 
  set_values(
    pgform, 
    availableEffectiveDate="943279200000 1999-11-22 07:00:00 MST (1999-11-22 14:00:00 GMT)", 
    availableExpiryDate="1561960800000 2019-07-01 00:00:00 MDT (2019-07-01 06:00:00 GMT)",
    fileFormat="CSV",
    startDate="2018-05-01", 
    endDate="2018-05-02"
  )


html_nodes(pgsession, "table") %>%
html_table(fill=TRUE)

Похоже, что не отправлены компоненты формы.Поскольку все, что возвращается, является беспорядочным беспорядком с сообщением «Дата начала / Дата окончания требуется».

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 июня 2018

Я смог понять это.Я не знаю точно, что происходит, но мой мыслительный процесс был:

1) Кажется, есть jsessionid, который мне нужно было получить.2) Он должен быть отправлен как запрос POST, а не как запрос GET.

library(curl)
library(xml2)
library(httr)
library(rvest)
library(stringi)
library(dplyr)
library(stringr)
library(lubridate)

url <- "http://itc.aeso.ca/itc/public/"

# warm up the curl handle
start <- GET(url)

# get the cookies
ck <- handle_cookies(handle_find(url)$handle)

# make the POST request
res <-     POST(paste(url,"/queryHistoricalIntertieReport.do",";jsessionid=",sep="") %s+% ck[1,]$value,
        user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0"),
        accept("*/*"),
        encode="form",
        multipart=FALSE, # this gens a warning but seems to be necessary
        add_headers(Referer=url),
        body=list(`startDate`=seq_dates[D],
                  `endDate`=seq_dates[D],
                  `fileFormat`="CSV",
                  `availableEffectiveDate`="943279200000 1999-11-22 07:00:00 MST (1999-11-22 14:00:00 GMT)",
                  `availableExpiryDate`="943279200000 1999-11-22 07:00:00 MST (1999-11-22 14:00:00 GMT)"))


tmp <- textConnection(rawToChar(res$content))

datIn <- read.csv(tmp, stringsAsFactors=FALSE, header=F)

Раздел Body / List - это поля в форме I, которые заполняются, включая 2 скрытых поля.Нашел это с помощью F12 dev-tools в Chrome и нажимал вниз, пока не нашел идентификаторы формы.

Остальное я взял отсюда: R веб-скребок с jsessionid

Понятия не имею, что такое User_Agent, но я на ПК и Mac.все еще работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...