无法访问 Web 上的数据 -URL HTTP 状态为“403 禁止访问”-
Can not access data on web -URL HTTP status was '403 Forbidden'-
这个简单的代码...
url1 <- 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt'
data1 <- readLines(url1)
...导致以下错误消息:
<cannot open URL 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt': HTTP status was '403 Forbidden'
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :>
我尝试了很多方法,得出的结论是网站拒绝了我从 R 发出的请求(使用那个或任何代码)。有时,我没有错误,代码工作正常,但通常没有。我总是可以直接从浏览器保存 .txt(我不能使用 R 将它保存到我的电脑),然后从我电脑中的文件导入。
示例 -> 我将页面保存为 .txt 然后
data1 <- readLines("Persh01.txt")
因为它有时会起作用,所以我还创建了一个循环,尝试直到完成,它完成了工作,但我更换了电脑,它似乎不再起作用了。
data1 <- NA
data1 <- try(readLines(url1))
while (inherits(data1, "try-error")) {
data1 <- try(readLines(url1))
}
有人可以帮助我吗?
谢谢
您需要向服务器传递几个 headers 才能接受您的请求。在这种情况下,您需要一个适当的 User-Agent
字符串和一个 Connection = "keep alive"
来防止 403 错误。
library(httr)
url1 <- 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt'
UA <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"
res <- GET(url1, add_headers(`Connection` = "keep-alive", `User-Agent` = UA))
data1 <- strsplit(content(res), "\n")[[1]]
head(data1, 10)
#> [1] "<SEC-DOCUMENT>0001172661-21-001865.txt : 20210816"
#> [2] "<SEC-HEADER>0001172661-21-001865.hdr.sgml : 20210816"
#> [3] "<ACCEPTANCE-DATETIME>20210816163055"
#> [4] "ACCESSION NUMBER:\t\t0001172661-21-001865"
#> [5] "CONFORMED SUBMISSION TYPE:\t13F-HR"
#> [6] "PUBLIC DOCUMENT COUNT:\t\t2"
#> [7] "CONFORMED PERIOD OF REPORT:\t20210630"
#> [8] "FILED AS OF DATE:\t\t20210816"
#> [9] "DATE AS OF CHANGE:\t\t20210816"
#> [10] "EFFECTIVENESS DATE:\t\t20210816"
请注意,网站的 robot.txt
文件不允许从网站的这一部分进行网络抓取和索引,因此您需要检查您是否违反了网站的使用政策。
这个简单的代码...
url1 <- 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt'
data1 <- readLines(url1)
...导致以下错误消息:
<cannot open URL 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt': HTTP status was '403 Forbidden' Error in file(con, "r") : cannot open the connection In addition: Warning message: In file(con, "r") :>
我尝试了很多方法,得出的结论是网站拒绝了我从 R 发出的请求(使用那个或任何代码)。有时,我没有错误,代码工作正常,但通常没有。我总是可以直接从浏览器保存 .txt(我不能使用 R 将它保存到我的电脑),然后从我电脑中的文件导入。
示例 -> 我将页面保存为 .txt 然后
data1 <- readLines("Persh01.txt")
因为它有时会起作用,所以我还创建了一个循环,尝试直到完成,它完成了工作,但我更换了电脑,它似乎不再起作用了。
data1 <- NA
data1 <- try(readLines(url1))
while (inherits(data1, "try-error")) {
data1 <- try(readLines(url1))
}
有人可以帮助我吗? 谢谢
您需要向服务器传递几个 headers 才能接受您的请求。在这种情况下,您需要一个适当的 User-Agent
字符串和一个 Connection = "keep alive"
来防止 403 错误。
library(httr)
url1 <- 'https://www.sec.gov/Archives/edgar/data/0001336528/0001172661-21-001865.txt'
UA <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"
res <- GET(url1, add_headers(`Connection` = "keep-alive", `User-Agent` = UA))
data1 <- strsplit(content(res), "\n")[[1]]
head(data1, 10)
#> [1] "<SEC-DOCUMENT>0001172661-21-001865.txt : 20210816"
#> [2] "<SEC-HEADER>0001172661-21-001865.hdr.sgml : 20210816"
#> [3] "<ACCEPTANCE-DATETIME>20210816163055"
#> [4] "ACCESSION NUMBER:\t\t0001172661-21-001865"
#> [5] "CONFORMED SUBMISSION TYPE:\t13F-HR"
#> [6] "PUBLIC DOCUMENT COUNT:\t\t2"
#> [7] "CONFORMED PERIOD OF REPORT:\t20210630"
#> [8] "FILED AS OF DATE:\t\t20210816"
#> [9] "DATE AS OF CHANGE:\t\t20210816"
#> [10] "EFFECTIVENESS DATE:\t\t20210816"
请注意,网站的 robot.txt
文件不允许从网站的这一部分进行网络抓取和索引,因此您需要检查您是否违反了网站的使用政策。