3

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

在尝试这个的过程中,我发现我在使用 R 提交任何表单时遇到问题。任何人都可以发布一个可重现的示例,用于使用 R 会话运行 Google 查询并返回首页的 HTML,或基于 Wikipedia 搜索搜索词?

我一直在使用 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 上没有找到有效的具体示例,而且许多示例似乎已经过时,因为 Google 更改了他们的“手气不错”搜索的格式。我还按照类似问题(通过 R 在维基百科上的 Sumbit 查询)中的建议查看了 WikipediR 包,但它似乎没有搜索功能。

4

1 回答 1

3

要在 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

于 2015-02-16T04:35:56.177 回答