gpt4 book ai didi

r - R中的URLencode问题

转载 作者:行者123 更新时间:2023-12-04 00:08:33 27 4
gpt4 key购买 nike

为了能够从 R 访问 NIST Chemistry Webbook 数据库,我需要能够将一些查询传递给 URL 编码的网址。大多数情况下,这种转换与 URLencode() 一起工作得很好,但在某些情况下不能。一种失败的情况,例如是为了

query="Poligodial + 3-methoxy-4,5-methylenedioxyamphetamine (R,S) adduct, # 1"

我尝试使用

library(XML)
library(RCurl)
url=URLencode(paste0('http://webbook.nist.gov/cgi/cbook.cgi?Name=',query,'&Units=SI'))
doc=htmlParse(getURL(url),encoding="UTF-8")

但是,如果您在网络浏览器中尝试此网址 http://webbook.nist.gov/cgi/cbook.cgi?Name=Poligodial%20+%203-methoxy-4,5-methylenedioxyamphetamine%20(R,S)%20adduct,%20%23%201&Units=SI它给出了未找到的名称。显然,如果您尝试从 http://webbook.nist.gov/chemistry/name-ser.html它需要 URL 编码的字符串

"http://webbook.nist.gov/cgi/cbook.cgi?Name=Poligodial+%2B+3-methoxy-4%2C5-methylenedioxyamphetamine+%28R%2CS%29+adduct%2C+%23+1&Units=SI"

有没有人知道在这种情况下我应该使用什么样的 gsub 规则来获得相同类型的 URL 编码?还是有其他简单的解决方法?

我试过了

url=gsub(" ","+",gsub(",","%2C",gsub("+","%2B",URLencode(paste('http://webbook.nist.gov/cgi/cbook.cgi?Name=',query,'&Units=SI', sep="")),fixed=T),fixed=T),fixed=T)

但这仍然不太正确,我不知道网站所有者可以使用什么规则......

最佳答案

URLencode 跟在 RFC1738 specification 后面(参见第 2.2 节,第 3 页),其中指出:

only alphanumerics, the special characters "$-_.+!*'(),", and reserved characters used for their reserved purposes may be used unencoded within a URL.

也就是说,它不编码加号、逗号或括号。所以它生成的 URL 在理论上是正确的,但在实践中是不正确的。

Scott 提到的 httr 包中的 GET 函数从 RCurl 调用 curlEscape,它对这些标点符号进行编码字符。

(GET 调用 handle_url 调用 modify_url 调用 build_url 调用 curlEscape.)

它生成的网址是

paste0('http://webbook.nist.gov/cgi/cbook.cgi?Name=', curlEscape(query), '&Units=SI')
## [1] "http://webbook.nist.gov/cgi/cbook.cgi?Name=Poligodial%20%2B%203%2Dmethoxy%2D4%2C5%2Dmethylenedioxyamphetamine%20%28R%2CS%29%20adduct%2C%20%23%201&Units=SI"

这个 seems to work OK .

httr 有很好的功能,你可能想开始使用它。让代码正常工作的最小更改就是将 URLencode 换成 curlEscape

关于r - R中的URLencode问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977480/

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