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

R语言生成分页URL报NA/NaN argument错误问题求助

R爬取分页链接时nb_pages返回NA导致构造失败问题排查

问题背景

  • 开发环境:R语言 + RStudio编辑器
  • 实现目标:获取目标房产网站对应板块的前5个分页URL
  • 故障现象:运行过程中变量nb_pages无法返回有效值,分页链接构造失败
  • 补充说明:所用代码来自开源项目,目的是通过修正代码错误练习R语法、理解爬虫逻辑;代码中加载的knitr、photon等依赖为后续功能预留,和本次报错无直接关联。

原运行代码

library(httr)
library(rvest)
library(tidyverse)
library(knitr)
library(photon)
 
go_GET <- function(url){
  result=GET(url,
             add_headers(
               "User-Agent" = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
               "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
               "Accept-Language"="fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"))
  return(result)
}
go_GET("https://www.leboncoin.fr/ventes_immobilieres/offres/rhone_alpes/rhone/")
 
url_base <- "https://www.leboncoin.fr/ventes_immobilieres/offres/rhone_alpes/rhone/"
url_base_raw <- go_GET(url_base)
html_base <- read_html(url_base_raw)
 
nb_links <- html_base  %>% 
  html_nodes("._2ilNG") %>%
  html_text() %>% 
  first() %>% 
  str_replace(" ","") %>% 
  as.numeric()
nb_pages=ceiling(nb_links/35)
 
 
pages=c(url_base,
        str_c(url_base,"p-",2:nb_pages))
pages[1:5]

控制台报错信息

> ...
> pages=c(url_base,
+         str_c(url_base,"p-",2:nb_pages))
Error in 2:nb_pages : NA/NaN argument
> pages[1:5]
[1] "https://www.leboncoin.fr/ventes_immobilieres/offres/rhone_alpes/rhone/"
[2] NA                                                                      
[3] NA                                                                      
[4] NA                                                                      
[5] NA 
> 

报错核心是执行2:nb_pages时传入了NA/NaN参数,最终生成的分页向量仅首页有效,其余均为NA值。

故障根因

nb_pages的值来自ceiling(nb_links/35),报错说明nb_links本身就是NA,溯源有两种常见可能:

  • CSS选择器失效:网站前端迭代后,原本用来匹配总条目数的类选择器._2ilNG已经不存在,html_nodes()抓不到对应节点返回空值,后续取第一个值、转数值的操作最终得到NA。
  • 反爬拦截:自定义请求头未通过网站风控校验,返回的页面不是正常的列表页(比如跳转到人机验证页、访问受限提示页),页面内自然不存在目标节点。

排查与修复步骤

  1. 校验节点抓取结果
    在计算nb_links前插入调试代码,确认是否抓到目标内容:
    # 打印匹配到的所有节点文本
    node_text <- html_base %>%
      html_nodes("._2ilNG") %>%
      html_text()
    print(node_text)
    
    如果输出为character(0),说明选择器失效。手动打开目标网站,按F12唤起开发者工具,定位到展示总房源数量的页面元素,复制新的有效CSS选择器替换原有._2ilNG即可。
  2. 校验请求返回状态
    插入代码确认请求是否被拦截:
    # 打印请求状态码,正常返回应为200
    print(status_code(url_base_raw))
    # 打印页面标题,判断是否跳转到验证/拦截页
    html_base %>% html_element("title") %>% html_text()
    
    如果状态码非200,或标题含验证、访问受限类提示,需要补充请求配置(比如添加对应cookie、增加请求间隔、使用代理IP),绕过风控拿到正常列表页后再做节点抓取。
  3. 固定前5页兜底方案
    如果仅需要前5页链接、暂时不需要按总条数计算全量分页,可以直接构造固定序列,跳过总页数计算逻辑避免NA报错:
    # 直接生成前5页链接
    pages <- c(url_base, str_c(url_base, "p-", 2:5))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:21:21