R语言爬取纳斯达克RSS XML Feed失败,多包测试均报错如何解决?
故障原因
纳斯达克RSS接口对请求头的User-Agent字段、TLS协议版本有强制校验,未携带合法浏览器标识、TLS版本低于1.2的请求会被直接拦截,这是所有请求报错的核心原因。
解决方案
方法1:基于httr构造合规请求后解析
library(httr) library(XML) my_url <- "https://www.nasdaq.com/feed/rssoutbound?symbol=BAC" # 构造符合服务器要求的请求参数 response <- GET( url = my_url, # 模拟常规浏览器UA,可替换为你自己当前浏览器的实际UA user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5; rv:109.0) Gecko/20100101 Firefox/116.0"), # 指定使用TLS 1.2及以上版本 config(sslversion = 4) ) # 校验请求状态,返回200即为请求成功 if (status_code(response) == 200) { # 提取XML文本内容 feed_text <- content(response, as = "text", encoding = "UTF-8") # 解析XML xml_data <- xmlTreeParse(feed_text, useInternalNodes = TRUE) }
方法2:适配tidyRSS使用
已经请求成功的XML文本可以直接传入tidyfeed函数,不需要再重复请求:
library(tidyRSS) # 直接传入方法1中获取的feed_text即可 parsed_feed <- tidyfeed(feed_text)
注意事项
- 每小时1次的请求频率远低于接口限流阈值,正常使用不会被封IP
- 若后续出现UA拦截,替换为你自己当前浏览器的User-Agent值即可
- 无需将链接改为http,http请求会被服务器直接重定向到https,反而增加请求失败概率
内容的提问来源于stack exchange,提问作者new_2_data_science
相关产品推荐
相关产品推荐

