【问题标题】:How to get Google Trends top 10 search terms in R?如何在 R 中获取 Google 趋势前 10 个搜索词?
【发布时间】:2015-12-29 06:52:47
【问题描述】:

在 R 中,我想从 Google 趋势中获取给定类别的前 10 个搜索词。例如,类别 autmotive 的前 10 个搜索词包含在 this url 中:

url <- "https://www.google.com/trends/explore#cat=0-47&geo=US&cmpt=q&tz=Etc%2FGMT-1"

为了检索搜索词,我尝试了以下方法:

library("rvest")
top_searches <- url %>%
  read_html() %>%
  html_nodes(xpath='//*[@class="trends-bar-chart-name"]') %>%
  html_table()

然而,这段代码会产生一个空列表(请注意,我使用Selectorgadget 来计算“xpath”)。

【问题讨论】:

  • 请参阅Rvest not recognizing css selector,了解您面临的一般问题。我的回答可能会说明您的代码无法正常工作的原因。您是否尝试过使用GTrendsR 包?
  • 感谢您的评论!我检查了 url 的源代码,显然前 10 个搜索词甚至没有出现在那里。很遗憾,gtrendsR 没有提供类别的热门搜索词。

标签: r css-selectors rvest google-trends


【解决方案1】:

这是你需要的:

library("rvest")

url <- 'http://www.google.com/trends/fetchComponent?hl=pl&cat=0-47&geo=US&cmpt=q&tz=Etc/GMT-1&tz=Etc/GMT-1&content=1&cid=TOP_ENTITIES_0_0&export=5&w=300&h=420'

top_searches <- url %>%
  read_html() %>% 
  html_nodes(xpath='//*[@class="trends-bar-chart-name"]') %>% 
  html_text(trim=TRUE)
# [1] "Car - Transportation mode"             "Sales - Industry"                     
# [3] "Chevrolet - Automobile Company"        "Ford - Automobile Make"               
# [5] "Tire - Industry"                       "Craigslist Inc. - Advertising company"
# [7] "Truck - Truck"                         "Engine - Literature Subject"          
# [9] "Kelley Blue Book - Company"            "Toyota - Automobile Make" 

如果您对为什么您的方法不起作用以及我如何设法解决该问题感兴趣,请继续阅读。


问题

问题在于您要查找的内容不在xml_document 对象中。您想要的数据是动态加载的rvest 无法应对 - 它只能获取网站源代码并检索那里的任何内容,而无需任何客户端处理。作为author of rvest stated,在这种情况下,您必须“对通信协议进行逆向工程并直接从服务器请求原始数据”或“使用像 RSelenium 这样的包来自动化 Web 浏览器”。

幸运的是,第一个解决方案被证明相对容易。

对 Google 趋势进行逆向工程

在您链接到的 Google 网站上,在您感兴趣的图表下方,有一个小图标:&lt;/&gt;。单击它会为您提供 HTML sn-p,可用于将该图表嵌入您自己的网站

这个 sn-p 基本上执行创建 &lt;iframe&gt; 元素的 JavaScript 代码,该元素显示 http://www.google.com/trends/...&export=5&w=300&h=420 的内容。事实证明,该网站包含您请求的数据。

但是,您应该意识到 Google 决定只发布第一个 HTML sn-p,您应该充分意识到这样做的后果。

为什么这是个坏主意

首先,未来没有承诺&lt;/&gt; 图标下的这个 HTML 将继续工作,直到谷歌决定关闭趋势嵌入,因为他们必须支持决定使用这个 sn-p 并忘记整个事情的网站。但是,只要 Google 愿意,调用的脚本内容、嵌入 HTML 页面的 URL 或 HTML 结构可能会发生变化。上面的代码明天可能会停止工作。

其次,Google 决定不希望人们直接调用此 URL。你可以这样做,虽然一般礼貌说你不应该。如果您还是决定这样做,则不应滥用它。任何人都可以猜测什么是“滥用”。

较小的 R 代码改进

回到 R 代码,我调用了 html_text() 函数而不是 html_table()。这是因为 html_nodes() 返回的是 &lt;span&gt; 元素列表,而不是 &lt;table&gt; 元素。

【讨论】:

  • 非常感谢这个非常详尽的答案,这正是我所需要的。很好的帮助!
  • @kanimbla 如果您发现该答案有用,请考虑accepting it
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多