在RI中,您希望从特定类别的Google趋势中获得前10个搜索字词.例如,类别autmotive的前10个搜索字词包含在此网址中:
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').
这就是你需要的:
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
无法应对 - 它只能获取网站源代码并检索那里的任何内容,而无需任何客户端处理.作为陈述的作者rvest
,在这种情况下,您必须"反向工程通信协议并直接从服务器请求原始数据"或"使用像RSelenium这样的软件包来自动化Web浏览器".
幸运的是,第一个解决方案被证明相对容易.
在您链接到的Google网站上,就在您感兴趣的图表下方,有一个小图标:>
.点击它会为您提供HTML代码段,可用于在您自己的网站上嵌入该图表.
此代码段基本上执行JavaScript代码,该代码创建显示http://www.google.com/trends/...&export=5&w=300&h=420内容的元素.事实证明,该网站包含您请求的数据.
但是,您应该意识到Google决定只发布第一个HTML代码段,您应该完全了解其后果.
首先,没有进一步的承诺.这个HTML下的>
图标将继续有效,直到Google决定关闭趋势嵌入,因为他们必须支持决定使用此代码段并忘记整个内容的网站.但是,只要谷歌感觉到,所调用的脚本内容,嵌入式HTML页面的URL或HTML结构都可能会发生变化.上面的代码明天可能会停止工作
其次,谷歌决定他们不希望人们直接调用此URL.你可以这样做,虽然常见的礼貌说你不应该这样做.无论如何你决定这样做,你不应该滥用它.这是任何人都猜测什么算是"滥用".
回到R代码,我调用html_text()
函数而不是html_table()
.那是因为html_nodes()
返回元素列表,而不是
元素.
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有