Отправить в поисковую форму Google или Википедии с помощью R

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

В процессе этого я обнаружил, что у меня возникли проблемы с отправкой любой формы с помощью 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 или Википедии, который работает, и многие из примеров кажутся устаревшими, поскольку Google изменил формат их поиска "Мне повезет". Я также посмотрел на пакет WikipediR, как это было предложено в аналогичном вопросе (Sumbit запросов в Википедии через R), но, похоже, у него нет функции поиска.


person gbostock    schedule 16.02.2015    source источник
comment
Вы также сталкивались с ошибкой в ​​форме $ fields: оператор $ недействителен для атомарных векторов? Это сообщение появилось в том же месте в моем коде. Во всяком случае, это сообщение похоже на ваше. Но решить проблему я тоже не мог.   -  person maj    schedule 16.04.2015


Ответы (1)


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

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

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

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

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

Если вы ищете "Progressiv Rock", он не найдет ни одной страницы, но отобразит несколько предложений, которые вы можете попытаться разобрать:

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

person RockScience    schedule 16.02.2015
comment
Спасибо за ответ, это отлично подойдет для этого проекта! Я все еще надеюсь узнать, как конкретно взаимодействовать с формой поиска на этих сайтах, если у кого-то еще есть идеи. - person gbostock; 16.02.2015