我正在尝试从单个 html 表中抓取/提取数据:http ://www.theplantlist.org/tpl/record/kew-419248和许多非常相似的页面。我最初尝试使用以下函数来读取表格,但这并不理想,因为我想将每个物种名称分成其组成部分(属/物种/亚种/作者等)。
library(XML)
readHTMLTable("http://www.theplantlist.org/tpl/record/kew-419248")
我使用 SelectorGadget 为要提取的每个表元素标识一个唯一的 XPATH(不一定是最短的):
对于属名: // [contains(concat( " ", @class, " " ), concat( " ", "Synonym", " " ))]// [contains(concat( " ", @class, " " ), concat(" ", "属", " "))]
对于物种名称: // [contains(concat( " ", @class, " " ), concat( " ", "Synonym", " " ))]// [contains(concat( " ", @class, " " ), concat( " ", "物种", " " ))]
对于亚种等级: //*[contains(concat( " ", @class, " " ), concat( " ", "infraspr", " " ))]
对于亚种名称: //*[contains(concat( " ", @class, " " ), concat( " ", "infraspe", " " ))]
对于置信水平(图像): // [contains(concat( " ", @class, " " ), concat( " ", "synonyms", " " ))]//img 对于源: // [contains(concat ( " ", @class, " "), concat(" ", "source", " "))]//a
我现在想将信息提取到数据框/表中。
我尝试使用 XML 包的 xpathSApply 函数来提取其中一些数据:
例如对于亚种等级
library(XML)
library(RCurl)
infraspeciesrank = htmlParse(getURL("http://www.theplantlist.org/tpl/record/kew-419248"))
path=' //*[contains(concat( " ", @class, " " ), concat( " ", "infraspr", " " ))]'
xpathSApply(infraspeciesrank, path)
然而,这种方法是有问题的,因为数据中的差距(例如,只有一些表的行有一个亚种等级,所以我返回的只是表中三个等级的列表,没有间隙)。数据输出也是我无法附加到数据框的类。
有谁知道从该表中提取信息到数据框中的更好方法?
任何帮助将非常感激!
汤姆