You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用rvest爬取需登录的私有网站?以micheque.uy/market为例

解决rvest登录https://micheque.uy/market失败的问题

你的代码失效大概率是表单定位、字段匹配或请求参数缺失导致的,以下是针对性的修复步骤:


1. 先确认登录表单的正确定位

不要依赖索引[[2]]直接取表单,先输出所有表单信息,找到真正的登录表单:

library(rvest)
# 设置真实浏览器UA,避免被反爬拦截
ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
pgsession <- html_session("https://micheque.uy/market", user_agent = ua)

# 输出所有表单,查看登录表单的特征(比如action包含login、name为loginform等)
all_forms <- html_form(pgsession)
print(all_forms)

根据输出结果,用特征筛选表单,比如找action含"login"的:

pgform <- all_forms[sapply(all_forms, function(x) grepl("login", x$action, ignore.case = TRUE))][[1]]

2. 核对表单字段名

登录输入框的name属性可能不是username/password,查看页面源码(F12)确认真实字段名,比如可能是email/pass,再填充表单:

# 替换为实际字段名,比如查看后发现是email和password
filled_form <- set_values(pgform,
                          "email" = "ibrahimmeljem@gmail.com",
                          "password" = "*******")

3. 处理CSRF Token(若存在)

部分网站会在表单中加入CSRF令牌,检查表单是否有csrf_token或类似字段,若有则需一并提交:

# 提取页面中的CSRF令牌值
csrf_token <- html_node(pgsession, css = "input[name='csrf_token']") %>% html_attr("value")
# 填充到表单中
filled_form <- set_values(pgform,
                          "email" = "ibrahimmeljem@gmail.com",
                          "password" = "*******",
                          "csrf_token" = csrf_token)

4. 提交表单并验证登录状态

提交后先确认是否登录成功,再访问目标页面:

# 提交表单,指定提交按钮的name(比如可能是"login",根据表单信息调整)
logged_session <- submit_form(pgsession, filled_form, submit = "login")

# 验证登录:检查页面是否出现登录后的标识(比如Logout链接)
logged_page <- read_html(logged_session)
if(length(html_nodes(logged_page, css = "a[href*='logout']")) > 0) {
  cat("登录成功")
} else {
  cat("登录失败,请检查字段名/令牌/UA设置")
}

# 登录成功后访问目标页面
market_page <- jump_to(logged_session, "https://micheque.uy/market")
page <- read_html(market_page)

# 提取数据(注意:需确认登录后页面的CSS选择器是否和之前一致)
usernames <- html_nodes(page, css = "#memberlist .username") 
data_usernames <- html_text(usernames, trim = TRUE)

关键注意事项

  • 不要依赖表单索引,用action、name等属性精准定位表单
  • 必须核对输入框的真实name属性,这是最常见的失效原因
  • 一定要设置真实的User-Agent,避免被网站识别为爬虫
  • 若网站有CSRF验证,必须提取并提交令牌

内容的提问来源于stack exchange,提问作者Ibrahim Meljem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:10:03