В течение двух дней я пытался понять, как заполнить форму и отправить ее для загрузки .csv файлов из https://www.igb.illinois.gov/VideoReports.aspx. Кажется, я не могу это взломать, к сожалению. Полное раскрытие: я начинающий веб-скребок. Я могу сделать основную очистку, но для меня это новая территория. В конце концов я надеюсь написать программу, которая сведет ежемесячные отчеты о доходах всех заведений к сентябрю 2009 года.
Кажется, основная проблема связана с тем, как выложена форма. Я не могу понять, как определить поля, которые я хотел бы заполнить, чтобы запросить файл .csv. Я использовал rvest
и RHTMLForms
. Я нашел форму в chrome инструментах разработчика и вижу все, что мне нужно. Кажется, я просто не могу детализировать, куда мне нужно go, чтобы отправить запрос.
Вот где я до сих пор дошел:
library('rvest')
library('RHTMLForms')
igb <- "https://www.igb.illinois.gov/VideoReports.aspx"
igb_html <- read_html(igb)
igbForm <- html_form(igb_html)
igbForm
Кажется, проблема в Начните здесь. «Форма» имеет только один элемент и включает скрытые входные данные. Поля, которые я хочу запросить, находятся ближе к концу. Это выглядит так ...
[[1]]
<form> 'aspnetForm' (POST VideoReports.aspx)
<input hidden> '__VIEWSTATE': /wEPDwUKMTU1MTExNzA3NQ9kFgJmD2QWAgIDD2QWAgIBD2QWBAIBD2QWEgIDDw8WAh4EVGV4dAUOU2VwdGVtYmVyIDIwMTJkZAIFDw8WAh8ABQ1GZWJydWFyeSAyMDIwZGQCFQ9kFgICAw8QZBAVAg5TdW1tYXJ5IHJlcG9ydA1EZXRhaWwgcmVwb3J0FQIOU3VtbWFyeSByZXBvcnQNRGV0YWlsIHJlcG9ydBQrAwJnZ2RkAhcPZBYCAgMPEA8WBh4ORGF0YVZhbHVlRmllbGQFA0tleR4NRGF0YVRleHRGaWVsZAUFVmFsdWUeC18 ....[TRUNCATE]
и в самом конце я получаю то, что хотел бы запросить ...
<input radio> 'ctl00$MainPlaceHolder$SearchType': TypeStatewide
<input radio> 'ctl00$MainPlaceHolder$SearchType': TypeMuni
<input radio> 'ctl00$MainPlaceHolder$SearchType': TypeEst
<select> 'ctl00$MainPlaceHolder$SearchStateType' [1/2]
<select> 'ctl00$MainPlaceHolder$SearchMunicipality' [0/1069]
<select> 'ctl00$MainPlaceHolder$SearchEstablishment' [0/10182]
<input text> 'ctl00$MainPlaceHolder$SearchLicenseNumber':
<select> 'ctl00$MainPlaceHolder$SearchStartMonth' [1/12]
<select> 'ctl00$MainPlaceHolder$SearchStartYear' [1/9]
<select> 'ctl00$MainPlaceHolder$SearchEndMonth' [1/12]
<select> 'ctl00$MainPlaceHolder$SearchEndYear' [1/9]
<input radio> 'ctl00$MainPlaceHolder$ViewType': ViewPDF
<input radio> 'ctl00$MainPlaceHolder$ViewType': ViewCSV
Я использовал следующее для пика в то, что мне нужно ...
igb_form <- getHTMLFormDescription(igb_html)
igb_form[[1]]
... и этот код, чтобы найти поля и значения для каждого из них. Например ...
igb_form_att <- igb_form[[1]]
igb_form_att$elements[[9]]
... показывает мне поле начального месяца и значения из выпадающего меню ...
ctl00$MainPlaceHolder$SearchStartMonth: [ February ] January, February, March, April, May, June, July, August, September, October, November, December
Я думал, что это будет сделано. Итак, я запустил следующее ...
igb_fill <- set_values(igb_html,
'ctl00$MainPlaceHolder$SearchType' = 'TypeEst',
'ctl00$MainPlaceHolder$SearchEstablishment'='All Establishments',
'ctl00$MainPlaceHolder$SearchEstablishment' ='',
'ctl00$MainPlaceHolder$SearchStartMonth'='September',
'ctl00$MainPlaceHolder$SearchStartYear'='2009',
'ctl00$MainPlaceHolder$SearchEndMonth' ='February',
'ctl00$MainPlaceHolder$SearchEndYear'='2020',
'ctl00$MainPlaceHolder$ViewType'='ViewCSV')
submit_form(session=igb_html, form=igb_fill, POST(igb))
Но получил эту ошибку ...
Error: Unknown field names: ctl00$MainPlaceHolder$SearchType, ctl00$MainPlaceHolder$SearchEstablishment, ctl00$MainPlaceHolder$SearchStartMonth, ctl00$MainPlaceHolder$SearchStartYear, ctl00$MainPlaceHolder$SearchEndMonth, ctl00$MainPlaceHolder$SearchEndYear, ctl00$MainPlaceHolder$ViewType
Traceback:
1. set_values(igb_form, `ctl00$MainPlaceHolder$SearchType` = "TypeEst",
. `ctl00$MainPlaceHolder$SearchEstablishment` = "All Establishments",
. `ctl00$MainPlaceHolder$SearchEstablishment` = "", `ctl00$MainPlaceHolder$SearchStartMonth` = "September",
. `ctl00$MainPlaceHolder$SearchStartYear` = "2009", `ctl00$MainPlaceHolder$SearchEndMonth` = "February",
. `ctl00$MainPlaceHolder$SearchEndYear` = "2020", `ctl00$MainPlaceHolder$ViewType` = "ViewCSV")
2. stop("Unknown field names: ", paste(no_match, collapse = ", "),
. call. = FALSE)
Извиняюсь за многословный вопрос, но я много возился это и, кажется, не может найти ответ, который помогает мне добраться туда, где мне нужно go. Может быть, я над головой. Но я был бы признателен за любую помощь! (Я также уверен, что код отправки неправильный, но я могу решить эту проблему после этого.)