0

我正在尝试从网站https://www.nseindia.com/option-chain提取安全IOC的选项表

包含数据的 JSON 链接是 https://www.nseindia.com/api/option-chain-equities?symbol=IOC

当我尝试将数据导入 R 时,出现错误,

library(jsonlite)
dat=fromJSON("https://www.nseindia.com/api/option-chain-equities?symbol=IOC")
Error in open.connection(con, "rb") : HTTP error 401.

但令人惊讶的是,当我在 Chrome/Firefox 中打开 webiste https://www.nseindia.com/option-chain并选择IOC股票然后使用fromJSON它时,它就可以工作了。

为什么会有这样的行为?以及如何在不打开网络浏览器的情况下获取数据?

4

1 回答 1

0

他们似乎会检查您的“用户代理”值并阻止来自看起来不像手动控制浏览器的所有内容的请求。httr::GET()为了避免这种情况,您可以在请求中更改您的“用户代理” 。

library(httr)
library(rvest)
httr::GET("https://httpbin.org/user-agent",
          config = add_headers("user-agent" = "Mozilla/5.0"))
raw <-
  GET(
    "https://www.nseindia.com/api/option-chain-equities?symbol=IOC",
    config = add_headers("user-agent" = "Mozilla/5.0")
  ) |>
  read_html()

raw |>
  html_nodes("p") |>
  html_text() |>
  jsonlite::fromJSON()
于 2021-09-02T16:26:16.313 回答