Я пытаюсь очистить / извлечь данные из одной HTML-таблицы: http://www.theplantlist.org/tpl/record/kew-419248 и нескольких очень похожих страниц.
Сначала я попытался использовать следующую функцию для чтения таблицы, но она не была идеальной, потому что я хочу разделить название каждого вида на составные части (род / вид / инфрасвид / автор и т. Д.).
library(XML)
readHTMLTable("http://www.theplantlist.org/tpl/record/kew-419248")
Я использовал SelectorGadget, чтобы идентифицировать уникальный XPATH для каждого элемента таблицы, который я хочу извлечь (не обязательно самый короткий):
Для имен родов: // [содержит (concat ("", @class, ""), concat ("", "Synonym", ""))] //
[содержит (concat ("", @class, ""), concat ("", "род", ""))]
Для названий видов: // [содержит (concat ("", @class, ""), concat ("", "Synonym", ""))] // [содержит (concat ("", @class, ""), concat ("", "разновидности", ""))]
Для внутривидовых рангов: // * [содержит (concat ("", @class, ""), concat ("", "infraspr", ""))]]
Для названий внутривидов: // * [содержит (concat ("", @class, ""), concat ("", "infraspe", ""))]]
Для уровней достоверности (изображение): // [содержит (concat ("", @class, ""), concat ("", "synonyms", ""))]] // img Для источников: // [содержит (concat ("", @class, ""), concat ("", "source", ""))] // a
Теперь я хочу извлечь информацию в фрейм данных / таблицу.
Я попытался использовать функцию xpathSApply пакета XML для извлечения некоторых из этих данных:
например. по внутривидовым разрядам
library(XML)
library(RCurl)
infraspeciesrank = htmlParse(getURL("http://www.theplantlist.org/tpl/record/kew-419248"))
path=' //*[contains(concat( " ", @class, " " ), concat( " ", "infraspr", " " ))]'
xpathSApply(infraspeciesrank, path)
Однако этот метод проблематичен из-за пробелов в данных (например, только некоторые строки таблицы имеют ранг внутривидовой принадлежности, поэтому все, что я возвратил, это список трех рангов в таблице без пробелов). Вывод данных также относится к классу, который у меня возникла проблема с подключением к кадру данных.
Кто-нибудь знает лучший способ извлечения информации из этой таблицы в информационный кадр?
Любая помощь будет высоко ценится!
Tom