Я смотрю на этот отличный ответ: https://stackoverflow.com/a/58211397/3502164.
Начало решения включает в себя:
library(httr)
library(xml2)
gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(content(gr, "text"))
xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value")
Вывод постоянен для нескольких запросов:
"59243d3a233492e9461f8f73136118f9"
Мой путь по умолчанию до сих пор был бы:
doc <- read_html("https://nzffdms.niwa.co.nz/search")
xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value")
Этот результат отличается от вышеприведенного вывода и изменяется при нескольких запросах.
Вопрос:
Какая разница между:
read_html(url)
read_html(content(GET(url), "text"))
Почему это приводит к различным значениям и почемутолько решение "GET" Возвращает CSV в связанном вопросе?
(я надеюсь, что все в порядке, чтобы структурировать его в виде трех под вопросов).
Что я пробовал:
Спускаясь вниз по кроличьей норе вызовов функций:
read_html
(ms <- methods("read_html"))
getAnywhere(ms[1])
xml2:::read_html
xml2:::read_html.default
#xml2:::read_html.response
read_xml
(ms <- methods("read_xml"))
getAnywhere(ms[1])
Но это привело к этому Вопросу: Найдите правильный метод
Мысли:
Я не вижу, чтобы запрос get брал какие-либо заголовки или файлы cookie, которые могли бы объяснить разные ответы.
Насколько я понимаю, read_html
и read_html(content(GET(.), "text"))
вернут XML / html.
Заключительная мысль: После https://stackoverflow.com/a/29045432/3502164 - 4 я мог представить, что каждый запрос GET обрабатывается через один и тот же локальный порт, в то время как read_html
принимает новый порт для каждого запроса,Но это не объясняет, почему запрос read_html
не работает / не приводит к желаемому формату .csv.