【问题标题】:Error in open.connection(con, "rb") : HTTP error 401open.connection(con, "rb") 中的错误:HTTP 错误 401
【发布时间】:2021-10-31 22:08:32
【问题描述】:

我正在尝试从网站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 时,它可以工作。

为什么会有这样的行为?和 不打开浏览器如何获取数据?

【问题讨论】:

  • 您看到的行为很可能是试图停止抓取。查看他们的robots.txt,您还可以看到,他们不希望人们在“/api/”路径中抓取任何内容。他们确实有一个 CSV 下载选项,也许这适合您的目的?
  • 谢谢,CSV 文件可以正常工作,但可以通过rvesthttr 获取?
  • CSV 的下载链接受 Javascript “保护”。

标签: r http-error jsonlite fromjson


【解决方案1】:

他们似乎会检查您的“用户代理”值并阻止来自所有看起来不像手动控制浏览器的请求。为了避免这种情况,您可以在 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()

【讨论】:

  • read_html 不适用于此链接。没有输出。
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多