使用jsonlite包解析Reddit多页数据时遇JSON解析错误
解决Reddit子版块多页数据JSON解析错误问题
问题情况
用R的jsonlite包爬取某Reddit子版块数据时,首页数据能正常读取,但第二页及后续页面调用jsonlite::fromJSON()时触发JSON解析错误,报错提示JSON文本含无效字符——实际返回的是HTML页面内容,而非预期的JSON数据。
错误信息
Error: lexical error: invalid char in json text. <!doctype html> <html lang="en"> <he (right here) ------^
尝试过的无效方法
- 改用
ndjson包解析返回内容 - 用
curl库发送HTTP请求后再传入fromJSON()解析
解决方案
问题根源是请求链接未添加.json后缀。Reddit的API接口需要通过.json后缀指定返回JSON格式数据,未添加时会默认返回网页HTML,导致JSON解析失败。补充后缀后即可正常获取多页数据。
原错误代码
# 原代码:未加.json后缀,第二页及以后返回HTML library(jsonlite) # 假设after参数是分页标记 url <- "https://www.reddit.com/r/subredditname/?after=t3_xxxxxx" data <- fromJSON(url)
尝试过的代码示例
# 用curl请求后解析 library(curl) library(jsonlite) url <- "https://www.reddit.com/r/subredditname/?after=t3_xxxxxx" resp <- curl_fetch_memory(url) data <- fromJSON(rawToChar(resp$content)) # 用ndjson尝试解析 library(ndjson) data <- stream_in(url(url))
解决后的正确代码
library(jsonlite) # 添加.json后缀,指定返回JSON格式 url <- "https://www.reddit.com/r/subredditname/.json?after=t3_xxxxxx" data <- fromJSON(url)
内容的提问来源于stack exchange,提问作者TurnipHead
相关产品推荐
相关产品推荐

