gpt4 book ai didi

r - 如何构造 httr POST 请求以返回站点数据?

转载 作者:行者123 更新时间:2023-12-05 00:24:34 25 4
gpt4 key购买 nike

我在从以下网站提取数据时遇到问题。如果我通过浏览器访问 long_url,我可以看到我想要抓取的表格,但是如果我使用 httr 从 R 中调用 url,我要么没有将数据返回给我,要么我不明白如何它正在退还给我。

base_url <- "http://web1.ncaa.org/stats/exec/records"
long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&orgId=721"

library(XML)
library(httr)
library(rvest) # devtools::install_github("hadley/rvest")

这些 POST 请求的结果在我看来是一样的,
doc <- POST(base_url, query = list(academicYear = "2014", sportCode = "MFB",
orgId = "721"))
doc <- POST(long_url)

class(doc)

两个 POST 请求都返回 200 的状态代码,并且 doc 的类是“HTMLInternalDocument”和“XMLInternalDocument”,这是允许我抓取页面的普通 R 对象。但是随后的 rvest 和 XML 函数变为空的,即使我知道 url 中有一个表。
 table <- html_nodes(doc, css = "td")
table <- readHTMLTable(doc)

有人可以帮我解释一下我的 httr 请求缺少什么吗?我也尝试了一个 GET 请求,但没有运气。

最佳答案

您在这里遇到的实际上是一个非常普遍的问题。 httr用途 RCurl为繁重的工作。 RCurl 在 GET 或 POST 请求中发送的默认 user_agent header 是 NULL ,这经常混淆脚本。这就是为什么您从浏览器和 httr(...) 得到不同结果的原因.如果你欺骗一个有意义的用户代理,你就会得到你想要的结果。

base_url <- "http://web1.ncaa.org/stats/exec/records"
ua <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url,
query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
user_agent(ua))

html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df <- df.list[[4]]
head(df)
# Opponent Game Date Air ForceScore OppScore Loc Neutral SiteLocation GameLength Attend
# 1 Colgate 08/31/2013 38 13 Home - 32,095
# 2 Utah St. 09/07/2013 20 52 Home - 32,716
# 3 Boise St. 09/13/2013 20 42 Away - 36,069
# 4 Wyoming 09/21/2013 23 56 Home - 35,389
# 5 Nevada 09/28/2013 42 45 Away - 24,545
# 6 Navy 10/05/2013 10 28 Away - 38,225

另请注意,该网站几乎所有内容都使用表格,因此 readHTMLTable(...)实际上返回一个包含 4 个数据框的列表。第四个是你想要的。

你不需要 rvest .

关于r - 如何构造 httr POST 请求以返回站点数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com