无法访问 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 文件不允许从网站的这一部分进行网络抓取和索引,因此您需要检查您是否违反了网站的使用政策。