我在进行网络抓取项目时遇到了困难。我的问题是,我需要提取许多节点的信息,同时将信息保存在它们的祖先上。
例如,如果我要获取维基百科页面中所有项目符号列表中的所有项目,则可以执行以下操作:
library(httr)
library(XML)
html = GET("https://en.wikipedia.org/wiki/Benz_Patent-Motorwagen")
par = htmlParse(html)
xpathSApply(par, "//ul/li", xmlValue)
但是我需要的是将每个项目与其来源的ul的编号(顺序)配对。我的尝试如下:
library(httr)
library(XML)
library(data.table)
html = GET("https://en.wikipedia.org/wiki/Benz_Patent-Motorwagen")
par = htmlParse(html)
dt = data.table(list_number = numeric(0), list_items = character(0))
for(i in 1:length(xpathSApply(par, "//ul"))){
node = getNodeSet(par, "//ul")[[i]]
list_items = xpathSApply(node, "/li", xmlValue)
new = data.table(list_number = i, list_items)
dt = rbind(dt, new)
}
但是它没有按我预期的那样工作。有什么建议吗?
答案 0 :(得分:0)
在这里回答我自己的问题。事实证明,我所需要的只是一个“”。在第二个xpath中,以指示查询从从getNodeSet提取的节点开始,而不是从文档顶部开始。
library(httr)
library(XML)
library(data.table)
html = GET("https://en.wikipedia.org/wiki/Benz_Patent-Motorwagen")
par = htmlParse(html)
dt = data.table(list_number = numeric(0), list_items = character(0))
for(i in 1:length(xpathSApply(par, "//ul"))){
node = getNodeSet(par, "//ul")[[i]]
list_items = xpathSApply(node, "./li", xmlValue)
new = data.table(list_number = i, list_items)
dt = rbind(dt, new)
}
https://stat.ethz.ch/pipermail/r-help//2009-March/416365.html