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

