2015-03-11 2 views
0

У меня есть код, который извлекает данные с веб-сайта с использованием определенных тегов в зависимости от страны. Однако я хочу, чтобы пользователь вводил страну, а затем извлекали соответствующие данные. Код у меня выглядит следующим образом:Использование текстовой строки ввода пользователя в R

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) 

Который не работает, так как где х в коде, он не заменяет его с пользовательским вводом. Если я, например, вручную заменил х на Аргентину, он отлично работает. Заранее спасибо.

ответ

1

Причина в том, что 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) 
+0

Спасибо, что отлично работает для меня –

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/"