我在从以下网站提取数据时遇到问题.如果我通过我的浏览器访问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")
Run Code Online (Sandbox Code Playgroud)
这些POST请求的结果与我相同,
doc <- POST(base_url, query = list(academicYear = "2014", sportCode = "MFB",
orgId = "721"))
doc <- POST(long_url)
class(doc)
Run Code Online (Sandbox Code Playgroud)
两个POST请求都返回200的状态代码,doc的类是"HTMLInternalDocument"和"XMLInternalDocument",这是允许我刮取页面的普通R对象.但是接下来的rvest和XML函数都是空的,尽管我知道url上有一个表.
table <- html_nodes(doc, css = "td")
table <- readHTMLTable(doc)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解释一下我的httr请求丢失了吗?我也试过没有运气的GET请求.
我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data.frame 直接加载到 R 中。
有问题的网站在下载 .csv 文件之前有 3 个下拉框可供选择,如下图所示:

我试图从下拉框中选择 3 个值,然后使用“下载 CSV”按钮将数据作为 data.frame 直接下载到 R 中。
我想下载特定站点的多年和多种污染物的不同组合。
在 StackOverflow 上的其他帖子中,我遇到getForm了 RCurl 包中的函数,但我不明白如何使用此函数控制 3 个下拉框。
数据源的 URL 是:http : //uk-air.defra.gov.uk/data/laqm-background-maps?year= 2011
我有以下curl要求:
curl --request GET --header "key: value" http://urlhere
Run Code Online (Sandbox Code Playgroud)
如何在 R 中运行请求?
我想在url中传递几个post参数,比如两个参数p1和p2.p1和p2的值是xyz(字符串)和1(数字).以下命令有什么区别:
POST(url, body=list(p1="xyz",p2=1))
Run Code Online (Sandbox Code Playgroud)
要么
POST(url, query=list(p1="xyz",p2=1))
Run Code Online (Sandbox Code Playgroud)
我也无法理解是否应该使用参数p1和p2的引用.如果是,那么单,双.
我正在尝试使用 httr 库从需要基于证书的身份验证的服务器访问数据。我有证书 (cert.pem)、密钥文件 (key.pem) 和根证书 (caroot.pem)
以下 curl 有效。
curl -H "userName:sriharsha@rpc.com" --cert cert.pem --key certkey.key --cacert caroot.pem https://api.somedomain.com/api/v1/timeseries/klog?limit= 1
如何指定 certkey.key 和 caroot.pem 到 httr GET 请求。我正在尝试使用以下 R 命令,但找不到指定证书密钥和 caroot 的选项。
咖啡馆=????r<-GET(" https://api.somedomain.com/api/v1/timeseries/klog ", query = list(limit = 1), add_headers("userName"="sriharsha@rpc.com"), config (cainfo = cafile,ssl_verifypeer=FALSE),详细())
因此,我正在为 curl 的(--cert、--key 和--cacert)寻找 httr 的等效选项。
我有一个已上传的 RDS 文件,然后通过curl::curl_fetch_memory()(via httr) 下载 - 这为我提供了 R 中的原始向量。
有没有办法读取表示 RDS 文件的原始向量以返回原始 R 对象?或者总是必须先将其写入磁盘?
我有一个类似于下面的设置:
saveRDS(mtcars, file = "obj.rds")
# upload the obj.rds file
...
# download it again via httr::write_memory()
...
obj
# [1] 1f 8b 08 00 00 00 00 00 00 03 ad 56 4f 4c 1c 55 18 1f ca 02 bb ec b2 5d
# ...
is.raw(obj)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)
它似乎readRDS()应该用于解压缩它,但它需要一个连接对象,而且我不知道如何从 R 原始向量创建连接对象 -rawConnection()看起来很有希望,但给出了:
rawConnection(obj)
#A connection with
#description …Run Code Online (Sandbox Code Playgroud) 我从未使用过 API,所以这是我的第一次尝试,我什至不知道我正在尝试做的事情是否可行。
我正在尝试从 SwissBioPics API ( https://www.npmjs.com/package/%40swissprot/swissbiopics%2Dvisualizer )获取细胞图片并将它们放在我的 R 会话中。
res <- httr::GET('https://www.swissbiopics.org/static/swissbiopics.js',
query = list(taxisid = '9606', sls= 'SL0073',gos = '0005641'))
result <- httr::content(res$content)
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
Error in httr::content(res$content) : is.response(x) is not TRUE
Run Code Online (Sandbox Code Playgroud)
有什么线索吗?
在尝试通过MS Windows上httr::user_agent的httr::GET()呼叫更改用户代理时,我需要考虑一些特殊问题吗?我正在使用R-3.1.0和httr 0.3.
按照示例?user_agent,我得到了这些结果:
url_this <- "http://httpbin.org/user-agent"
Run Code Online (Sandbox Code Playgroud)
标准用户代理:
GET(url_this)
Response [http://httpbin.org/user-agent]
Status: 200
Content-type: application/json
{
"user-agent": "curl/7.19.6 Rcurl/1.95.4.1 httr/0.3"
}
Run Code Online (Sandbox Code Playgroud)
修改的用户代理:
GET(url_this, user_agent("Mozilla/5.0"))
Response [http://httpbin.org/user-agent]
Status: 200
Content-type: application/json
{
"user-agent": "curl/7.19.6 Rcurl/1.95.4.1 httr/0.3"
}
Run Code Online (Sandbox Code Playgroud)
我曾预料到第二次调用会返回更接近我url_this在浏览器中访问时所获得的内容:
{
"user-agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?也先跑setInternet2(TRUE),但结果相同.
我试图用两种不同的方法(xmlParse和httr :: GET)请求一个XML文档,并期望响应是相同的.我用xmlParse得到的响应是我所期望的但是使用httr :: GET我的请求URL在某些时候会被截断.
一个例子:
require(httr)
require(XML)
require(rvest)
term <- "alopecia areata"
request <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=",term)
#requesting URL with XML
xml_response <- xmlParse(request)
xml_response %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
Run Code Online (Sandbox Code Playgroud)
这应该返回
[1] "alopecia areata"
Run Code Online (Sandbox Code Playgroud)
现在为httr
httr_response <- GET(request)
httr_content <- content(httr_response)
httr_content %>%
xml_nodes(xpath = "//Result/Term") %>%
xml_text
Run Code Online (Sandbox Code Playgroud)
这回来了
[1] "alopecia"
Run Code Online (Sandbox Code Playgroud)
有趣的是:如果我们检查请求的URL的httr_response元素,那是正确的.只有回应是错误的.
> httr_response$request$opts$url
[1] "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/egquery.fcgi?term=alopecia areata"
> httr_response$url
[1] "http://eutils.ncbi.nlm.nih.gov/gquery?term=alopecia&retmode=xml"
Run Code Online (Sandbox Code Playgroud)
所以在某些时候我的查询词被截断了.如果将整个请求手动放入浏览器,则其行为与预期一致.
任何建议如何解决这个问题将不胜感激.
我想,这是一些非常简单的卷曲代码,我试图将其翻译成httr格式.
curl -X POST \
--user '<email>:<password>' \
--header 'user-key: <user_key>' \
--url https://api.m.com/v1/clients
Run Code Online (Sandbox Code Playgroud)
到目前为止我已经尝试过
library(httr)
POST(url = "https://api.m.com/v1/clients",
add_headers('user-key' = "userkey",
user = 'email:password'))
Run Code Online (Sandbox Code Playgroud)
但没有成功.这里有什么错误吗?--user在curl代码中是否有等效的httr ?