2015-02-16 4 views
3

Я пытаюсь использовать R для перехода к определенной странице Википедии на основе строкового значения. Поскольку у меня нет точных URL-адресов в Википедии для списка ключевых слов, которые я ищу (например, «Prog rock», поскольку поисковый запрос относится к URL-адресу, заканчивающемуся в Progressive_rock), я думал, что передать ключевые слова в Google " Feeling Lucky ", а затем очистить HTML на странице Википедии.Отправить в Google или в форму поиска в Википедии, используя R

В процессе попытки я обнаружил, что у меня возникли проблемы с отправкой любой формы с R. Может ли кто-нибудь опубликовать воспроизводимый пример для запуска запроса Google с сеансом R и возврата HTML-страницы на верхнюю страницу или Поиск в Википедии на основе поисковых запросов?

Я использую отличный пакет rvest Хэдли для большинства моих веб выскабливания, но не был в состоянии получить этот аспект работу даже на пример взят из руководства rvest:

goog<-html_session("https://www.google.com") 

search <- html_form(html("https://www.google.com"))[[1]] 

search.mod<-set_values(search, q = "My little pony") 

submit_form(goog, search.mod, submit='btnI') 

Каких возвращает:

Error: length(url) == 1 is not TRUE 

Я попытался поиск в Википедии непосредственно, а с той же удачи:

url<-"http://en.wikipedia.org/wiki/Main_Page" 

wiki<-html_session(url) 

search.form<-html_form(wiki)[[1]] 

form.mod<-set_values(search.form, search="Frank Zappa") 

submit_form(wiki,form.mod,submit='go') 

Которая возвращает ту же ошибку. Я подозреваю, что делаю какую-то невероятно простую ошибку, но я не могу понять, что это такое.

Многие из примеров онлайн-поиска для форм поиска, похоже, используют пакеты httr, RCurl и RSelenium, но я не нашел конкретного примера в Google или Wikipedia, который работает, и многие из примеров выглядят устаревшими поскольку Google изменил формат поиска «Я чувствую себя счастливым». Я также посмотрел на пакет WikipediR, как было предложено по аналогичному вопросу (Sumbit queries on wikipedia through R), но у него нет функции поиска.

+0

Вы также столкнуться с «Ошибка в форме $ поля: $ operator недопустим для атомных векторов "? Это сообщение появилось в той же точке моего кода. В любом случае, это сообщение похоже на ваше. Я тоже не мог решить проблему. – maj

ответ

2

Чтобы отправить запрос в Википедии или Google, вам не нужен html_form, поскольку они оба предоставляют способ передать запрос в URL-адресе. Например, если вы ищете «яблоко» в Википедии, просто введите

http://en.wikipedia.org/wiki/Special:Search/apple

будет переадресован на страницу яблока, как есть страница с этим названием.

http://en.wikipedia.org/wiki/Special:Search/Prog_rock

также найти нужную страницу, как происходит автоматическое перенаправление на месте.

Если вы ищете «прогрессив рок», он не найдет любую страницу, но будет отображать некоторые предложения, которые вы можете попробовать разобрать:

http://en.wikipedia.org/wiki/Special:Search/Progressiv_rock

+0

Спасибо за ваш ответ, который отлично подойдет для этого проекта! Я все еще надеюсь научиться взаимодействовать конкретно с формой поиска на этих сайтах, хотя, если у кого-нибудь есть идеи. – gbostock

+0

@gbostock вы должны, возможно, прочитать http://www.mediawiki.org/wiki/API:Main_page – RockScience