Na maioria das vezes não consigo fazer uma solicitação para o seguinte site:
https://www.adondevivir.com/proyectos-etapa-pre-venta-en-construccion.html
library(rvest);library(tibble);library(httr2)
base_url <- "https://www.adondevivir.com/proyectos-etapa-pre-venta-en-construccion.html"
parsed_base_url <- base_url |>
read_html() # This works sometimes and I get the underlying html
# THIS NEVER WORKS
pagina_parsed <- base_url |>
request() |>
req_user_agent(
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
) |>
req_headers(
Referer = "https://www.adondevivir.com/",
Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
`Accept-Language` = "es-419,es;q=0.6",
`Accept-Encoding` = "gzip, deflate, br, zstd",
`Cache-Control` = "max-age=0",
`Sec-Ch-Ua` = '"Brave";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
Priority = "u=0, i"
) |>
req_perform()
Por que não consigo fazer solicitações à página na maioria das vezes (nem mencionar que ela não funciona com httr2 com os cabeçalhos fornecidos acima)? Existe uma maneira de superar esse "problema" httr2
? Isso tem a ver com cookies ou com a forma como a página está se protegendo de ser copiada?
Acho que poderia repetir a solicitação várias vezes até que funcionasse, mas acho que não aprenderia muito sobre o motivo pelo qual ela não funciona.
Ambos. É protegido pela Cloudflare, que passa por uma série de travessuras para confundir ferramentas automatizadas e navegadores sem cabeça. Se você abrir esse site em uma nova sessão ou no modo de navegação anônima do seu navegador, você deverá ver o desafio Cloudflare Javascript em ação. E se você tiver a guia de rede do DevTools aberta (com preservação de log ativada e talvez também com limitação para desacelerar um pouco as coisas), deverá ver algumas outras dicas sobre o que é investigado. Se a Cloudflare considerar sua solicitação legítima, os cookies serão configurados para conceder passagem durante sua sessão. Você pode reutilizá-los com
httr2
.A abordagem semimanual pode ser mais ou menos assim:
httr2::curl_translate()
Criado em 05/08/2024 com reprex v2.1.0