使用rvest爬取需登录网站遇HTTP 404错误,求解决方案
登录URL 404问题及替代弃用request_POST的解决方案
1. 定位真实的登录提交端点
你用的https://leghe.fantacalcio.it/login返回404,说明这个地址不是有效的登录页面/接口。解决第一步是找到网站真实的登录提交地址:
- 打开浏览器访问
https://leghe.fantacalcio.it,找到登录入口 - 按下F12打开开发者工具,切换到「网络」标签页
- 输入账号密码完成登录操作,找到请求类型为
POST的那条请求,记录其请求URL(这才是真正接收登录数据的地址) - 同时查看该请求的
Form Data,确认账号、密码对应的参数名(可能不是username/password,比如是email/pass这类)
2. 用httr2替代弃用的request_POST
当前rvest的会话系统基于httr2,推荐用httr2处理登录会话,再结合rvest解析页面,示例代码如下:
library(rvest) library(httr2) # 替换为抓包得到的真实登录API地址 login_api <- "https://leghe.fantacalcio.it/api/真实登录路径" # 初始化会话 session <- session() # 发送登录请求,替换参数名为你抓包得到的真实字段名 session <- session %>% req_url(login_api) %>% req_body_form( email = "你的真实账号", password = "你的真实密码" ) %>% req_perform() # 访问需要登录的目标页面并解析数据 target_content <- session %>% req_url("你要爬取的目标页面URL") %>% req_perform() %>% resp_body_html() # 示例:提取页面中class为target-data的元素文本 target_content %>% html_element(".target-data") %>% html_text()
3. 若为页面表单提交的场景
如果登录是通过页面内的表单提交(而非纯API接口),先找到包含登录表单的有效页面,再用rvest处理:
library(rvest) # 替换为包含登录表单的真实页面URL login_page <- "https://leghe.fantacalcio.it/真实登录页面" # 创建会话并获取表单 session <- html_session(login_page) login_form <- session %>% html_form()[[1]] # 填充表单,参数名需与表单的name属性完全一致 filled_form <- login_form %>% set_values( `email` = "你的真实账号", `password` = "你的真实密码" ) # 提交表单,获取登录后的会话 session <- session %>% submit_form(filled_form) # 跳转至目标页面并解析数据 session %>% jump_to("目标页面URL") %>% html_element(".需要抓取的选择器") %>% html_text()
关键注意事项
- 必须通过抓包确认真实的登录地址和参数名,网站的登录接口可能随时变更
- 部分网站会要求提交CSRF令牌,此时需要从登录页面先提取
csrf_token这类参数,再一并填入表单或请求体 - 若遇到反爬拦截,可添加浏览器UA头模拟正常访问:
req_headers(User-Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
内容的提问来源于stack exchange,提问作者BPeif
相关产品推荐
相关产品推荐

