爲了能夠從R訪問NIST化學Webbook數據庫,我需要能夠將某些查詢傳遞給URL編碼的Web地址。大多數情況下,這種轉換對URLencode()很有效,但在某些情況下不適用。一例失敗的案例是R中的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)
但仍然是不完全正確的,我不知道什麼樣的規則網站的所有者也可以使用...
很多謝謝 - 對我來說,這是一個更簡單的解決方案,尤其是因爲我更喜歡getURL()而不是GET()(它對我來說似乎在一些片狀互聯網連接上更健壯一些)! Thx數百萬爲這個很好的解釋! –