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

使用rvest爬取fanfiction.net持续报503错误的解决方案咨询

问题解决步骤
  • 固定使用合规标识类User-Agent
    你之前传入机构、姓名、邮箱组合的UA曾成功拿到200响应,优先固定使用该类UA即可,不要尝试模拟浏览器UA,该站点对带特殊符号、格式复杂的常规浏览器UA反爬校验规则更严格,容易触发403错误。UA格式参考:"Non-commercial academic research crawler: Name XXX, Institution XXX, Contact XXX@xxx.edu"
  • 补充完整请求头字段
    仅传入UA不足以通过基础反爬校验,需要补充常规浏览器会携带的请求头字段,包括Accept、Accept-Language、Accept-Encoding等,降低被识别为自动化请求的概率。
  • 开启会话保持机制
    使用httr::session()创建持久会话,自动存储站点返回的Cookie,后续所有请求复用同一个会话实例。多数首次请求触发的503错误是因为请求未携带有效Cookie,携带站点下发的Cookie后即可正常访问。
  • 增加请求间隔与退避重试机制
    首次请求前增加2~3秒的随机延迟,所有请求之间严格遵守robots.txt要求设置不低于5秒的间隔。若返回503/403错误,使用指数退避策略重试,重试次数不超过3次,每次重试间隔翻倍,避免触发频率限制。

优化后可直接运行的代码示例

library(httr)
library(rvest)

# 替换为你自己的真实信息作为UA
userAgent <- "Non-commercial academic research crawler: 张三, XX大学文学院, zhangsan@xxx.edu.cn"
# 创建持久会话,先请求robots.txt符合爬虫礼仪
sess <- session(
  url = "https://www.fanfiction.net/robots.txt", 
  user_agent(userAgent),
  add_headers(
    Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    `Accept-Language` = "en-US,en;q=0.9",
    `Accept-Encoding` = "gzip, deflate, br",
    Connection = "keep-alive"
  )
)
# 遵守5秒爬取间隔要求
Sys.sleep(5)
# 复用会话请求目标页面
resp <- session_jump_to(sess, "https://www.fanfiction.net")
# 解析页面内容
page_content <- read_html(resp)
注意事项
  • 仅爬取研究所需的最小数据集,不要批量下载全站点内容,避免给服务器造成额外负担
  • 若持续返回验证页面,可手动在本地浏览器中访问一次站点,将浏览器中拿到的有效Cookie写入请求头中临时使用,不要频繁更换IP触发更严格的反爬规则

内容的提问来源于stack exchange,提问作者Anastasia Pupynina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:48:02