使用rvest提取网页var变量内容遇V8报错,求优雅解决方案
方法一:精准提取目标变量后用V8解析
原script标签中可能混有其他JS代码(比如函数、无关变量),直接全量执行容易触发语法错误。可以先用正则提取navdata变量的定义片段,再交给V8处理:
# 从已获取的script文本中提取navdata的定义语句 navdata_js <- stringr::str_extract(data, "var navdata = \\{.*?\\};") # 初始化V8上下文并解析 library(V8) ctx <- v8() ctx$eval(navdata_js) navdata <- ctx$get("navdata")
方法二:提取JSON结构直接解析(轻量无V8依赖)
navdata本质是JSON格式的对象,可跳过JS解析环节,直接提取JSON内容后用jsonlite转成R数据结构:
# 提取navdata对应的JSON部分(忽略var定义和结尾分号) # 若navdata定义跨多行,添加(?s)开启单行模式让.匹配换行 navdata_json <- stringr::str_extract(data, "(?<=var navdata = )(?s)\\{.*?\\}(?=;)") # 解析为R数据框/列表 library(jsonlite) navdata <- fromJSON(navdata_json)
关键说明
(?s)是单行模式标记,适配跨多行的JSON定义场景;.*?是非贪婪匹配,确保只捕获navdata对应的闭合大括号,避免误匹配后续其他JS代码。
内容的提问来源于stack exchange,提问作者shani
相关产品推荐
相关产品推荐

