0

大家好,

我正在寻找澳大利亚人口/居住的栅格图层。我曾尝试在网上找到一些免费的数据集,但实际上找不到任何有用的格式。我认为尝试从维基百科中抓取人口数据并制作我自己的栅格图层可能会很有趣。为此,我尝试从 wiki 获取信息,但对 html 一无所知并没有帮助我。

这个想法是提供澳大利亚所有具有 wiki 页面的城镇的列表,并将适当的数据提取到 data.frame 中。

我可以将网页源数据放入 R 中,但被困在如何提取我想要的特定数据上。下面的代码显示了我卡在哪里,任何帮助都将不胜感激或在正确的方向上提供一些提示。

我想我可能可以使用 readHTMLTable() 因为在普通网页中,我想要的信息在一个漂亮的表格中位于右侧。但是当我使用这个功能时,我得到一个错误(下)。获取源信息时,有什么方法可以指定此表吗?

抱歉,如果这个问题没有多大意义,我不知道在搜索 HTML 文件时我在做什么。

感谢您的帮助,非常感谢!

干杯,亚当

    require(RJSONIO)
    loc.names <- data.frame(town = c('Sale', 'Bendigo'), state = c('Victoria', 'Victoria'))
    u <- paste('http://en.wikipedia.org/wiki/',
         sep = '', loc.names[,1], ',_', loc.names[,2])
    res <- lapply(u, function(x) htmlParse(x))

使用 readHTMLTable 时出错:

    tabs <- readHTMLTable(res[1])
    Error in (function (classes, fdef, mtable)  : 
    unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"list"’

例如,我需要的一些数据在 html 文件中看起来像这样。我的问题是如何在我拥有的 HTML 内容中指定这些位置?

/ <span class="geo">-38.100; 147.067

title="Victoria (Australia)">Victoria</a>. It has a population (2011) of 13,186
4

1 回答 1

1

res在这种情况下返回一个列表,您需要使用res[[1]]而不是res[1]访问其元素。在这些元素上使用 readHTMLTable 将为您提供所有表格。带有地理信息的表格包含在一个表格中,class = "infobox vcard"您可以单独提取这些表格,然后将它们传递给 readHTMLTable

require(XML)
lapply(sapply(res, getNodeSet, path = '//*[@class="infobox vcard"]')
       , readHTMLTable)

如果您不熟悉 xpaths,该selectr软件包允许您使用可能更容易的 css 选择器。

require(selectr)
> querySelectorAll(res[[1]], "table span .geo")
[[1]]
<span class="geo">-38.100; 147.067</span> 

[[2]]
<span class="geo">-38.100; 147.067</span> 
于 2014-02-25T02:15:06.303 回答