在R中使用用户输入文本字符串

时间:2015-03-11 00:01:28

标签: r web-scraping user-input

我有一个代码,根据输入的国家/地区使用特定代码从网站中提取数据。但是,我想要它以便用户输入一个国家/地区,然后提取相应的详细信息。我的代码如下:

library(rvest)

x <- readline(prompt = "Enter Country:   ")

url <- "http://oceantax.co.uk/links/tax-authorities-worldwide.html"
pg <- html(url)

country <- pg %>% html_nodes(xpath="//a[contains(@title, 'x')]")

country <- pg %>% html_nodes("a[title~=x]")

argname <- country %>% html_text()       # get the text of the anchor
argurl <- country %>% html_attr("href") # get the URL of the anchor
y <- rbind(argname,argurl)

这不起作用,因为x在代码中,它不会用用户输入替换它。例如,如果我用阿根廷手动替换x,它就可以完美地运行。提前谢谢。

2 个答案:

答案 0 :(得分:1)

原因是x被视为引号内的文本。字面意思是字符“x”,而不是矢量。

请参阅下面的行创建“公式”向量。我使用paste()来连接一个字符串,该字符串被输入到抓取函数中。

这适用于我。让我知道它是否适合你。

library(rvest)

x <- readline(prompt = "Enter Country:   ")

url <- "http://oceantax.co.uk/links/tax-authorities-worldwide.html"
pg <- html(url)

formula<-paste("//a[contains(@title, '",x,"')]",sep='')
country <- pg %>% html_nodes(xpath=formula)

formula<-paste('a[title~=',x,']',sep='')
country <- pg %>% html_nodes(formula)

argname <- country %>% html_text()       # get the text of the anchor
argurl <- country %>% html_attr("href") # get the URL of the anchor
y <- rbind(argname,argurl)

答案 1 :(得分:0)

这里只是使用包XML的替代方案。此外,这会使用sprintf()替换x的值。如果要替换多个值,这很好,而且通常比paste()更有效

library(XML)

x <- readline(prompt = "Enter Country:   ")
"Argentina"

url <- "http://oceantax.co.uk/links/tax-authorities-worldwide.html"

node <- htmlParse(url)[sprintf("//a[contains(@title, %s)]", x)][[1]]

do.call("rbind", list(argname = xmlValue(node), 
    argurl = xmlGetAttr(node, "href")))

#         [,1]                                       
# argname "Federal Administration of Public Revenues"
# argurl  "http://www.afip.gob.ar/english/"