R 如何获得谷歌趋势排名前十的搜索词?

R 如何获得谷歌趋势排名前十的搜索词?,r,css-selectors,rvest,google-trends,R,Css Selectors,Rvest,Google Trends,在R中,我想从Google Trends中获得给定类别的前10个搜索词。例如,类别的前10个搜索词包括在: url% html_节点(xpath='/*[@class=“趋势条形图名称”]')%>% html_表() 但是,这段代码会产生一个空列表(请注意,我用来计算“xpath”)。这就是您需要的: library("rvest") url <- 'http://www.google.com/trends/fetchComponent?hl=pl&cat=0-47&g

在R中,我想从Google Trends中获得给定类别的前10个搜索词。例如,类别的前10个搜索词包括在:

url%
html_节点(xpath='/*[@class=“趋势条形图名称”]')%>%
html_表()
但是,这段代码会产生一个空列表(请注意,我用来计算“xpath”)。

这就是您需要的:

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" 
library(“rvest”)
url%
html_节点(xpath='/*[@class=“趋势条形图名称”]')%>%
html_文本(trim=TRUE)
#[1]“汽车-运输模式”“销售-行业”
#[3]“雪佛兰汽车公司”“福特汽车制造”
#[5]“轮胎行业”Craigslist Inc.广告公司
#[7]“卡车-卡车”“发动机-文献主题”
#[9]“凯利蓝皮书-公司”“丰田-汽车制造”
如果您有兴趣了解为什么您的方法不起作用,以及我是如何设法解决这个问题的,请继续阅读


问题 问题是您要查找的内容不在
xml\u文档中
object
。您需要的数据是动态加载的,
rvest
无法处理,它只能获取网站源代码并检索其中的任何内容,而无需任何客户端处理。因此,在这种情况下,您必须“对通信协议进行反向工程,并直接从服务器请求原始数据”或“使用像RSelenium这样的包来自动化web浏览器”

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

反向工程谷歌趋势 在你们链接到的谷歌网站上,在你们感兴趣的图表的正下方,有一个小图标:
。单击它会生成HTML代码片段,可用于将该图表嵌入到您自己的网站上

此代码段基本上执行JavaScript代码,该代码创建显示内容的
元素。事实证明,此网站包含您请求的数据

然而,您应该意识到Google决定只发布第一个HTML代码片段,您应该充分意识到这一点的后果

为什么这是个坏主意 首先,在未来的道路上没有承诺。在Google决定关闭Trends embedding之前,
图标下的这个HTML将继续工作,因为他们必须支持那些决定使用这个代码片段的网站,而不考虑整个事情。但被调用的脚本的内容、嵌入的HTML页面的URL或HTML结构可能会在谷歌愿意的时候改变。上面的代码明天可能会停止工作

其次,谷歌决定他们不希望人们直接调用这个URL。你可以这样做,尽管一般的礼貌说你不应该这样做。如果你决定无论如何都要这样做,你不应该滥用它。谁也猜不出什么算“虐待”

R代码的微小改进
回到R代码,我调用了
html\u text()
函数,而不是
html\u table()
。这是因为
html\u nodes()
返回
元素的列表,而不是
元素。

请参阅以了解您面临的一般问题。我的回答可能会解释为什么你的代码不起作用。您是否尝试过使用
GTrendsR
软件包?谢谢您的评论!我检查了url的源代码,显然前10个搜索词甚至没有出现在那里
gtrendsR
不幸地没有提供类别的顶级搜索词。非常感谢这个非常详细的答案,这正是我需要的。帮了大忙@如果你发现答案是有用的,请考虑。
library("rvest")
top_searches <- url %>%
  read_html() %>%
  html_nodes(xpath='//*[@class="trends-bar-chart-name"]') %>%
  html_table()
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"