标签: httr

R 以编程方式更改 IP 地址

当前通过将不同的字符串传递给html_session()方法来更改 user_agent 。

有没有办法在抓取网站时更改计时器上的 IP 地址?

r rcurl httr rselenium rvest

5
推荐指数
1
解决办法
5824
查看次数

从瑞典统计局下载数据。查询中的瑞典语字符

我设法使用网站 api 从瑞典统计局检索了一些数据。这个问题的答案解决了我的大部分问题。

如何以不太详细的方式发布 JSON 格式的请求以从 R 中的 URL 获取 JSON 数据到 data.frame 中?

但我仍然有两个问题。

如果我的 json 问题中有带有变音符号的字符(如“Å”、“Ä”、“Ö”),我会从服务器收到“404”响应。

我正在尝试从此表下载数据:

按地区、就业、年龄和性别划分的 16 岁以上人口 (RAMS)。2004 - 2015 年

(点击“Continue”,然后点击“api for this table”就可以查询到网站上的api,但是必须把响应格式从“px”改为“json”。)

此代码有效:

library(jsonlite)
library(httr)

bodytxt <- '{
  "query": [
{
  "code": "Region",
  "selection": {
  "filter": "vs:RegionKommun07",
  "values": [
  "0114",
  "1280"
  ]
  }
},
  {
  "code": "Alder",
  "selection": {
  "filter": "item",
  "values": [
  "16-19"
  ]
  }
  },
  {
  "code": "Tid",
  "selection": {
  "filter": "item",
  "values": [
  "2015"
  ]
  }
  }
  ],
  "response": …
Run Code Online (Sandbox Code Playgroud)

r httr

5
推荐指数
1
解决办法
297
查看次数

使用R进行网页抓取时如何处理验证码

我试图从这个网站上抓取数据,使用httrrvest。经过多次抓取(大约 90 - 100 次),该网站会自动将我转移到另一个带有验证码的网址。

这是正常的网址: "https://fs.lianjia.com/ershoufang/pg1"

这是验证码网址: "http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"

当我的蜘蛛遇到验证码网址时,它会告诉我停止并在浏览器中解决它。然后我在浏览器中手动解决它。但是当我运行蜘蛛并发送GET请求时,蜘蛛仍然被转移到验证码网址。同时在浏览器中,一切正常,即使我输入验证码网址,它也会将我转回浏览器中的正常网址。

即使我使用代理,我仍然遇到同样的问题。在浏览器中,我可以正常浏览网站,而蜘蛛一直在转移到验证码网址。

我想知道,

  1. 我使用代理的方式正确吗?
  2. 为什么蜘蛛不断被传输而浏览器没有。他们来自同一个IP。

谢谢。

这是我的代码:

a <- GET(url, use_proxy(proxy, port), timeout(10),
          add_headers('User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
                      'Connection' = 'keep-alive',
                      'Accept-Language' = 'en-GB,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,en-US;q=0.2,fr;q=0.2,zh-TW;q=0.2',
                      'Accept-Encoding' = 'gzip, deflate, br',
                      'Host' = 'ajax.api.lianjia.com',
                      'Accept' = '*/*',
                      'Accept-Charset' = 'GBK,utf-8;q=0.7,*;q=0.3',
                      'Cache-Control' = 'max-age=0'))
b <- a %>% read_html %>% html_nodes('div.leftContent') %>% html_nodes('div.info.clear') %>% 
            html_nodes('div.title') %>% html_text() …
Run Code Online (Sandbox Code Playgroud)

captcha r web-crawler web-scraping httr

5
推荐指数
1
解决办法
3271
查看次数

使用 https URL 登录后下载文件

我正在尝试下载一个 excel 文件,我有该文件的链接,但我需要先登录该页面才能下载该文件。我已经通过 rvest、rcurl 和 httr 成功通过了登录页面,但是我在登录后下载文件非常困难。

url <- "https://website.com/console/login.do"
download_url <- "https://website.com/file.xls"
session <- html_session(url)
form <- html_form(session)[[1]]

filled_form <- set_values(form,
                          userid = user,
                          password = pass)

## Save main page url
main_page <- submit_form(session, filled_form)

download.file(download_url, "./file.xls", method = "curl")
Run Code Online (Sandbox Code Playgroud)

当我运行 download.file 命令时,该文件会在我的工作目录中弹出,但它不是我要下载的文件,实际上只是一个损坏的 .XLS 文件,没有数据。

作为参考,如果我通过chrome登录网站,并在登录后将下载链接粘贴到浏览器窗口中,文件会自动开始下载。如果我在 IE 中执行相同操作,则会弹出文件下载对话框并询问我是否要保存文件。

可能的相关资料:

  • 这是我的电脑在工作时禁用了 cookie,因此我无法使用浏览器中的 cookie
  • 我已经尝试使用基于 SO 上的大量帖子的 httr 和 rcurl 的不同方法无济于事

在此先感谢您的时间!

r rcurl httr rvest

5
推荐指数
1
解决办法
1015
查看次数

curl 错误 - SSL 证书问题:无法获取本地颁发者证书

我在执行 ping 美国海军天文台 API 的 GET 调用时遇到困难。此请求以前有效,但现在因未知原因失败。

这是请求:

library(httr)

#ping API
try(RETRY("GET", url = "http://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

#ERROR MESSAGE (request always times out with error)
#Error in curl::curl_fetch_memory(url, handle = handle): SSL certificate problem: #unable to get local issuer certificate
#Request failed [ERROR]. Retrying in 1 seconds...
Run Code Online (Sandbox Code Playgroud)

我正在运行 R v3.5.1 和 RStudio v1.1.463。Curl 是 v3.2,httr 是 v1.3.1。

我尝试过的故障排除方法无效:

  • 仔细检查美国海军天文台 API 文档,以确保请求仍然正确/最新(确实如此)。
  • 安装此调用适用的先前版本的 R (v.3.4.4)(无变化)。
  • 更新到最新版本的 RStudio(v.1.1.463,无变化)
  • 此站点列出的解决方案(quantmod - SSL:无法在 R 中获取本地颁发者证书)未做任何更改。这是 RI 中可以在网上找到的与此错误相关的唯一线程。

R 用户有什么想法吗?非常感谢任何帮助或指出正确方向!

ssl curl r httr

5
推荐指数
1
解决办法
3852
查看次数

使用 httr 为 Trello 创建 oauth 令牌时如何修复“无效的 return_url”错误?

我想使用 trelloR 包管理我的 Trello 卡和板,但是当我尝试使用该get_token功能创建令牌时,我在浏览器上收到一条错误消息:“无效的 return_url”。

my_token <- get_token(key = my_key, secret = my_secret)
Run Code Online (Sandbox Code Playgroud)

my_key是我的个人 Trello API 密钥,my_secret是我的 OAuth 秘密。我在 Trello 页面上找到了它们,该页面会在登录后为您提供身份验证代码:https : //trello.com/app-key

要使用 Trello API 并访问板,我需要一个令牌。此令牌由 httr 包使用 OAuth1.0 生成。事实上,功能get_token做这样的事情,根据的Jakub Chromec,作者和trelloR的维护者在这里

my_token <- get_token(key = my_key, secret = my_secret)
Run Code Online (Sandbox Code Playgroud)

当我get_token用我的个人密钥和秘密执行这段代码或函数时,我被重定向到我的浏览器,这是正常的。如本页所述,应该会出现一个屏幕,要求我允许进行身份验证。但相反,我在浏览器中只有一条错误消息:“无效的 return_url”。

在 RStudio 控制台中,这仍然显示:

trello.app = httr::oauth_app(
  appname = "trello-app",
  key = my_key,
  secret = my_secret)

trello.urls = httr::oauth_endpoint(
  request = "OAuthGetRequestToken",
  authorize ="OAuthAuthorizeToken?scope=read&expiration=30days&name=trello-app", …
Run Code Online (Sandbox Code Playgroud)

r oauth trello httr

5
推荐指数
1
解决办法
2029
查看次数

发出 API 请求时使用 httr 包进行身份验证

我正在学习如何使用 R 中的 API 获取数据。我知道其目的httr是为curl 包提供一个包装器。\n我为了向 API 发出请求而遵循的文档具有以下 HTTP 请求格式。下面的代码将用于生成令牌

\n\n
curl -s \\\n     -d "client_id=clientid\xe2\x80\x9d \\\n     -d "username=user\xe2\x80\x9d \\\n     -d "password=pwd\xe2\x80\x9d \\\n     -d "grant_type=password" \\\n     -d "scope=openid email" \\\n     "https://auth.com/token"\n
Run Code Online (Sandbox Code Playgroud)\n\n

之后,我将使用令牌通过此请求与 API 进行通信

\n\n
curl --header "Content-Type: application/json" \\\n     --header "Accept: application/+json" \\\n     --header "Authorization: Bearer token_goes_here\xe2\x80\x9c \\\n     --request GET \\\n     --url "https://api-sitename.org/sections?parent_id=0"\n
Run Code Online (Sandbox Code Playgroud)\n\n

最初,我在终端中运行这两个请求,它们成功了,我收到了 JSON 格式的响应。我的问题是,如何在 R 脚本中运行这些请求,以便获得响应并将它们存储在 R studio 全局环境中?我的目标是最终将数据集从API加载到Rstudio工作环境中。\nT

\n

api r httr jsonlite

5
推荐指数
1
解决办法
5531
查看次数

如何使用 R 执行 EUR-Lex API 的 SOAP 请求?

您将如何SOAP使用 R 请求 EUR-Lex 的 API?

EUR-Lex 是一个包含许多法律行为的欧盟数据库。在他们的 Web 服务手册中,他们描述了他们的SOAP系统,但没有描述如何使用 R。我已经尝试了一段时间就业httrRCurl但没有成功。我想使用 R 而不是 SOAPUI。

这里有人有这方面的经验吗?

从下面的链接中,我应该按如下方式定义正文吗?

body <- "<sear:searchRequest>
<sear:expertQuery>${expert query}</sear:expertQuery> <sear:page>${page}</sear:page>
<sear:pageSize>${pageSize}</sear:pageSize> <sear:searchLanguage>${search language
</sear:searchLanguage>
          </sear:searchRequest>"
Run Code Online (Sandbox Code Playgroud)

然后我如何将其与 结合起来headerfields使用RCurlhttr包?

以下三个答案似乎相关,但我不知道如何将它们应用到我的 EUR-Lex 示例中:

  1. 如何将 SOAP 请求curl 转换为 RCurl
  2. 带有 WSDL for R 的 SOAP 客户端
  3. R 中的 SOAP 请求

EUR-Lex API 链接:

  1. WSDL: https: //eur-lex.europa.eu/eurlex-ws?wsdl
  2. 手册:https ://eur-lex.europa.eu/content/tools/webservices/SearchWebServiceUserManual_v2.00.pdf

soap web-services r rcurl httr

5
推荐指数
1
解决办法
960
查看次数

将curl OAuth2令牌请求转换为httr

我正在尝试使用 r 和 httr 访问domain.com.au api。我可以使用 API 密钥来实现此目的,但不能使用 OAuth2

该文档表明:

通过客户端凭证获取访问令牌 使用您的 client_id 和 client_secret 以及您需要的范围列表向https://auth.domain.com.au/v1/connect/token端点发出 POST 请求。请参阅 API 参考,了解每个端点所需的范围列表。尝试使用计划中未包含的范围将导致 400 invalid_scope 错误。该请求必须使用基本身份验证进行身份验证,其中 client_id 和 client_secret 分别对应于用户名和密码。

https://developer.domain.com.au/docs/v2/authentication/oauth/client-credentials-grant

卷曲的实现很简单:

curl -X POST -u 'clientid:secret' -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&scope=api_listings_read%20api_agencies_read' 'https://auth.domain.com.au/v1/connect/token'
Run Code Online (Sandbox Code Playgroud)

它返回令牌而不进行任何重定向。

但是,我无法将其转换为等效的 httr POST 请求来获取令牌。我目前拥有的是:

oep <- oauth_endpoint(base_url = "https://auth.domain.com.au/v1/connect/token", 
                      request = NULL, 
                      access = "access_token" )

myapp <- oauth_app("domain",
     key = "client_id_here",
     # The secret isn't secrete. A user still has to authenticate when redirected.
     secret = …
Run Code Online (Sandbox Code Playgroud)

curl r oauth oauth-2.0 httr

5
推荐指数
1
解决办法
1140
查看次数

使用 imfr 查询 IMF API - 错误无结果/不接受过滤器

我目前正在尝试从国际货币基金组织的贸易统计方向下载特定系列,以计算国家之间的贸易量。有一个 r-packageimfr在这方面做得非常出色。然而,当我选择特定的一组时,我遇到了问题。

\n

这段代码工作得很好,并为我提供了我感兴趣的五个国家的完整数据系列:

\n
library(imfr)\n\n# get the list of imf datasets \nimf_ids()\n\n# I am interested in direction of trade "DOT", so check the list of codes that are in the datastructure\nimf_codelist(database_id = "DOT")\n\n# I want the export and import data between countries FOB so "TXG_FOB_USD" and "TMG_FOB_USD"\nimf_codes("CL_INDICATOR_DOT")\n\n# works nicely for exports:\ndata_list_exports <- imf_data(database_id = "DOT", indicator = c("TXG_FOB_USD"), \n                      country = c("US","JP","KR"), \n                      start = "1995",\n                      return_raw = TRUE, \n                      freq = "A")\n\n# however the same code …
Run Code Online (Sandbox Code Playgroud)

api r economics httr

5
推荐指数
1
解决办法
902
查看次数