Разница между read_html (url) и read_html (контент (GET (url), «текст»)) - PullRequest
2 голосов
/ 03 октября 2019

Я смотрю на этот отличный ответ: 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.

...