我正在尝试并且未能按国家/地区从this web page搜索到平均智商的表格。我正在尝试按照this blog post中描述的流程,但我似乎无法找到正确的XPath。
这是我正在使用的代码,其中包含XPath到该表的占位符:
library(dplyr)
library(rvest)
url <- "https://iq-research.info/en/page/average-iq-by-country"
xpath <- [xpath copied from Chrome using SelectorGadget]
IQ <- url %>%
read_html() %>%
html_nodes(xpath) %>%
html_table()
我尝试在Chrome中使用选择器小工具来找到合适的XPath,但是当我切换它们时,有许多元素似乎将所需的表格绘制为蓝色。我尝试复制大多数或所有这些元素的XPath并将其用作xpath
并获得两种类型的结果:{xml_nodeset (0)}
或Error in tokenize(css) : Unexpected character '/' found at position 1
。
我很感激帮助弄清楚如何到达那张桌子(以及将来我可能会遇到的那些)。
答案 0 :(得分:0)
感谢@ hrbrmstr关于javascript问题的指针,我可以使用phantomjs
并跟随this tutorial完成此操作。具体来说,我:
phantomjs.exe
解压缩到我的工作目录(我想我可以在R中使用download.file
和unzip
完成1和2,但是...) ; system("./phantomjs scrape_iq.js")
; 这是我在步骤3中创建并在步骤4中使用的.js文件:
// scrape_iq.js
var webPage = require('webpage');
var page = webPage.create();
var fs = require('fs');
var path = 'iq.html'
page.open('https://iq-research.info/en/page/average-iq-by-country', function (status) {
var content = page.content;
fs.write(path,content,'w')
phantom.exit();
});
这是我在步骤8中使用的R代码,用于从本地html文件phantomjs
中创建表,并在我的工作区中获取一个名为IQ
的数据框。
library(dplyr)
library(rvest)
IQ <- read_html("iq.html") %>%
html_nodes('table') %>%
html_table() %>%
.[[1]]
这是产生数据框的头部:
> head(IQ)
Rank Country IQ
1 1 Hong Kong 108
2 1 Singapore 108
3 2 South Korea 106
4 3 Japan 105
5 3 China 105
6 4 Taiwan 104