我是一个相当新的网页抓取和搜索后,我发现了一些例子,这是this和this;
我尝试提取的数据如下所示:
library(httr)
library(rvest)
library(dplyr)
s <- session("https://www.barchart.com/stocks/highs-lows/highs")
cookies <- s$response$cookies
token <- URLdecode(dplyr::recode("XSRF-TOKEN",
!!!setNames(cookies$value,
cookies$name)))
pg <-GET(url="https://www.barchart.com/proxies/core-api/v1/quotes/get",
add_headers(
Referer="https://www.barchart.com/stocks/highs-lows/highs",
`Accept`="application/json",
`Accept-Encoding`="gzip, deflate",
`Connection`="keep-alive",
`User-Agent`="Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0",
`X-XSRF-TOKEN`=token
),
query=list(
lists="stocks.us.new_highs_lows.highs.overall.1y",
fields="symbol,symbolName,lastPrice,priceChange,percentChange,volume,highHits1y,highPercent1y,lowPercent1y,tradeTime,symbolCode,symbolType,hasOptions",
meta="field.shortName,field.type,field.description,lists.lastUpdate",
hasOptions="true",
page="1",
limit="100",
raw="1"
),
verbose()) -> res
data <- content(res, as = "text")
print(data)
理想情况下,我应该得到一些文本,其中包括一个我可以解析的json对象(devtools中检查的结果)。
我已经花了相当多的时间挠头,仍然没有一个线索,只是还没有。rvest
没有request_GET
函数暴露任何更多,因此唯一的选择是httr::GET
,它没有真正的工作。
1条答案
按热度按时间tkclm6bt1#
我不是一个经验丰富的网页刮刀的任何手段,但花了一些时间试图弄清楚这一点。
API似乎要求在您的请求中发送Cookie,否则您将被拒绝访问。
请注意,当您按原样运行代码时,
res$status_code
的结果是401 Unauthorized Error,这意味着您不被允许访问资源。我不得不使用DevTools来检查网页,查看Network选项卡,找到发出API请求的文件,然后将cookie字符串复制/粘贴到R中,此外还在测试时添加了其他标头。
我试着用
cookie
Dataframe 来格式化我的cookie,但由于某种原因,它不喜欢这样。以下是您可以复制cookie字符串的文件: