【问题标题】:Submit To Google Or Wikipedia Search Form Using R使用 R 提交到 Google 或 Wikipedia 搜索表单
【发布时间】:2015-02-16 03:29:14
【问题描述】:

我正在尝试使用 R 根据字符串值导航到特定的维基百科页面。由于我没有我正在查找的关键字列表的确切 Wikipedia URL(例如,“Prog rock”作为搜索词转到以 Progressive_rock 结尾的 URL),我的想法是将关键字传递给 Google“ Feeling Lucky”搜索,然后抓取生成的 Wikipedia 页面的 HTML。

在尝试此操作的过程中,我发现我无法使用 R 提交任何表单。任何人都可以发布一个可重现的示例,用于使用 R 会话运行 Google 查询并返回首页的 HTML 或维基百科根据搜索词搜索?

我一直在使用 Hadley 出色的 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 上没有找到有效的具体示例,而且许多示例似乎已经过时了谷歌改变了他们“手气不错”的搜索格式。我还按照类似问题 (Sumbit queries on wikipedia through R) 中的建议查看了 WikipediR 包,但它似乎没有搜索功能。

【问题讨论】:

  • 您是否也遇到过“form$fields 中的错误:$ 运算符对原子向量无效”?此消息出现在我的代码中的同一点。无论如何,这条消息确实与您的相似。不过,我也无法解决问题。

标签: r screen-scraping rvest search-engine-api


【解决方案1】:

要在 Wikipedia 或 google 上提交搜索,您不需要 html_form,因为它们都提供了在 url 中传递查询的方法。例如,如果您在 Wikipedia 中查找“apple”,只需键入

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

【讨论】:

  • 感谢您的回复,这将非常适合这个项目!不过,如果其他人有任何想法,我仍然希望学习如何专门与这些网站上的搜索表单进行交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多