如何从html中提取数据到R中

时间:2016-01-19 03:57:43

标签: html xml r

我有一个内容为table的链接。我尝试的第一件事是找到是否有任何按钮可以点击,不幸的是没有。然后我尝试在R中使用一个名为XML的包来获取不同节点之间的数据,以便自己建立一个数据框。

为了做到这一点,我需要知道我想要提取哪个节点(或HTML标记)。所以我右键单击Web浏览器并找到包含我想要的表的标记。enter image description here

<fieldset id="result"开始表格的内容。我们还可以从浏览器中看到表格的第一行是<li class="vesselResultEntry removeBackground">

然后,当我尝试使用R下载此HTML时,我发现与该表相关的整个<li>标记已消失,并由<li class="toRemove"/>替换。下面是我的R代码:

library(XML)
url <- "http://www.fao.org/figis/vrmf/finder/search/#stats"
webpage <- readLines(url)
htmlpage <- htmlParse(webpage, asText = TRUE)
data <- xpathSApply(htmlpage, "//ul[@id='searchResultsContainer']")
data

# <ul id="searchResultsContainer" class="clean resultsContainer"><li class="toRemove"></li></ul> 

我在代码中尝试做的只是看看我是否可以获取特定标记中的内容。显然,我想要获取的行不在我保存的对象(webpage)中。

所以我的问题是:

有没有办法以任何方式下载我想要的表格(理想情况下在R中)?

这个网站是否有某种保护措施阻止我将整个HTML作为文本文件下载并获取数据?

非常感谢任何建议

1 个答案:

答案 0 :(得分:2)

您尝试提取的页面会在加载时在浏览器端动态汇编。通过直接获取URL获得的内容不包含您在查看DOM时看到的数据。稍后将从单独的URL加载该数据。

我看一下,有问题的网址是:

http://www.fao.org/figis/vrmf/finder/services/public/vessels/search?c=true&gd=true&nof=false&not=false&nol=false&ps=30&o=0&user=NOT_SET

我不确定大多数查询字符串是什么,但很清楚ps是&#34;页面大小&#34;并且o是&#34;偏移&#34;。页面大小似乎达到200以上,它被强制为30. URL返回JSON,因此您需要一些方法来解析它。回复中嵌入的数据显示有231047个条目,因此您必须提出多个请求以获取所有条目。

数据提供商通常不会欣赏人们像这样搜索他们的数据。您可能希望四处寻找可下载的版本。