Когда передавать заголовки при очистке веб-сайта - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь понять, когда команды xml2 / rvest действительно запрашивают веб-сайт и когда необходимо указывать заголовки, чтобы избежать передачи заголовков по умолчанию.

library(httr)
library(xml2)
library(rvest)

url <- "http://testing-ground.scraping.pro"

#open session, passing headers
s <- paste0(url, "/textlist") %>% html_session(add_headers(
  "user-agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
  "Accept" = "text/css,*/*;q=0.1",
  "Accept-Language" = "en-US,en;q=0.5",
  "Accept-Encoding" = "gzip, deflate, br"))

#scrape path list, assuming headers need not be passed again
url_list <- s %>% html_nodes(xpath=".//a[contains(text(), 'Text list')]") %>% html_attr("href")
#Concatenate base URL and scraped paths
url_list <- paste0(url, url_list)

#scrape web page, assuming headers need not be passed again
h <- s %>% jump_to(url_list[1]) %>% read_html()

Мой взгляд на приведенный выше код что веб-сайт запрашивается три раза: 1) при открытии сессии, 2) при очистке путей, 3) при очистке веб-страницы. Передачи заголовков при открытии сеанса достаточно, и те же заголовки будут повторно использованы в следующих командах, которые используют один и тот же сеанс.

Это правильно? Будут ли файлы cookie (и другая неуказанная информация заголовка) также сохраняться в сеансе и снова передаваться на веб-сайт?

1 Ответ

0 голосов
/ 06 марта 2020

Теперь я понимаю, что веб-сайт запрашивается только дважды:

  • 1) при открытии сеанса: html_session()
  • 3) при переходе на другой URL в сеансе: jump_to()

Очистка (read_html()) или разбор (html_nodes()) из сеанса не генерирует запросы, так как сеанс уже содержит страницу.

Это не полный ответ поскольку я до сих пор не знаю, возвращаются ли неуказанные заголовки (включая файлы cookie) обратно на хост.

...