R爬虫遇SSL证书过期但浏览器可访问 需将HTML解析为JSON
问题1解决方案:直接让
fromJSON()正常运行的方法 jsonlite::fromJSON()底层默认调用R的download.file拉取数据,你可以通过临时修改全局下载参数绕过SSL验证,无需调整原有调用逻辑:
# 临时设置全局下载参数,关闭SSL验证 options(download.file.method = "libcurl") options(download.file.extra = "-k") library(jsonlite) website <- 'http://api.draftkings.com/sites/US-DK/sports/v1/sports?format=json' # 直接调用fromJSON即可正常获取数据 res <- fromJSON(website) # 用完可以恢复默认设置:options(download.file.extra = "")
问题2解决方案:从请求响应中提取JSON数据
你之前的操作逻辑存在错误:接口返回的是纯JSON文本,并非HTML文档,调用read_html()解析JSON内容属于类型不匹配,自然会得到乱码,不需要走HTML/XML解析流程,正确处理方式如下:
library(httr) library(jsonlite) website <- 'http://api.draftkings.com/sites/US-DK/sports/v1/sports?format=json' # 发起请求时关闭SSL验证,不需要调用read_html response <- GET(website, config = config(ssl_verifypeer = FALSE)) # 提取响应的文本内容,直接解析为JSON格式 json_data <- fromJSON(content(response, as = "text", encoding = "UTF-8"))
如果你已经生成了被错误解析的doc对象,不建议继续从该对象转换数据,直接按上述逻辑重新请求的成本更低,数据准确性也更高。
内容的提问来源于stack exchange,提问作者CoolGuyHasChillDay
相关产品推荐
相关产品推荐

