我大多数时候无法向以下网站发出请求:
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()
为什么大多数时候我都无法向页面发出请求(更不用说它不适用于上面提供的标头的 httr2)?有没有办法克服这个“问题” httr2
?这与 cookie 有关,还是页面保护自己不被抓取的方式有关?
我想我可以重试很多次该请求直到它起作用,但我认为我不会了解太多关于它不起作用的原因。
两者都有。它受 Cloudflare 的保护,Cloudflare 通过一系列诡计来混淆自动化工具和无头浏览器。如果您在新会话或浏览器的隐身模式下打开该网站,您应该会看到 Cloudflare Javascript 挑战的实际效果。如果您打开了 DevTools 的网络选项卡(启用了保留日志,也许还启用了节流以减慢速度),您应该会看到一些有关探测内容的其他提示。如果 Cloudflare 发现您的请求合法,则会设置 cookie 以在您的会话期间授予通过权。您可以使用 重用它们
httr2
。半手动方法可能是这样的:
httr2::curl_translate()
创建于 2024-08-05,使用reprex v2.1.0