- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试从单个 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", ""))]//[包含(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)
但是,这种方法存在问题,因为数据存在间隙(例如,表中只有某些行具有种内等级,因此我返回的只是表中三个等级的列表,没有间隙)。数据输出也是我无法附加到数据框的类。
有谁知道从该表中将信息提取到数据框中的更好方法?
如有任何帮助,我们将不胜感激!
汤姆
最佳答案
这是另一种解决方案,它将每个物种名称拆分成其组成部分
library(XML)
library(plyr)
# read url into html tree
url = "http://www.theplantlist.org/tpl/record/kew-419248"
doc = htmlTreeParse(url, useInternalNodes = T)
# extract nodes containing desired information
xp_expr = "//table[@class= 'names synonyms']/tbody/tr"
nodes = getNodeSet(doc, xp_expr)
# function to extract desired fields from a given node
fields = list('genus', 'species', 'infraspe', 'authorship')
read_node = function(node){
dl = lapply(fields, function(x) xpathSApply(node,
paste(".//*[@class = ", "'", x, "'", "]", sep = ""), xmlValue))
tmp = rep(' ', length(dl))
tmp[sapply(dl, length) == 1] = unlist(dl)
confidence = xpathSApply(node, './/img', xmlGetAttr, 'alt')
return(c(tmp, confidence))
}
# apply function to all nodes and return data frame
df = ldply(nodes, read_node)
names(df) = c(fields, 'confidence')
它产生以下输出
genus species infraspe authorship confidence
1 Critesion chilense (Roem. & Schult.) Ã\u0081.Löve H
2 Hordeum chilense chilense L
3 Hordeum cylindricum Steud. H
4 Hordeum depauperatum Steud. H
5 Hordeum pratense brongniartii Macloskie L
6 Hordeum secalinum chilense Ã\u0089.Desv. L
关于xml - 使用 XML/RCurl R 包解析 HTML 表,而不使用 readHTMLTable 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6427061/
我想制作一张真实世界总统的 map 。 为此,我想从维基百科中抓取每位总统的图像。 第一步是从 wiki 页面获取数据: http://en.wikipedia.org/wiki/List_of_cu
我正在使用以下代码: url = "http://finance.yahoo.com/q/op?s=DIA&m=2013-07" library(XML) tabs = readHTMLTable(
试图抓取维基百科页面,我以前做过很多次类似的事情 library(XML) myURL 2 Location
这个问题在这里已经有了答案: R Error using readHTMLTable (2 个答案) 关闭 7 年前。 当我在笔记本电脑上运行这条线时, table500 <- readHTMLTa
我正在尝试从以下网址的表格中抓取数据: http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033 问题是包含在 标签。当我使用以
我安装了 R 3.3.1 并使用 RStudio 0.99.903。我正在尝试从以下 URL 将表读入 R:https://www.fantasypros.com/nfl/rankings/conse
我正在 R 中自学一些基本的表格网页抓取技术。 。但我在运行函数 readHTMLTable 时看到错误. unable to find an inherited method for functio
我试图使用 readHTMLTable 将一些数据存储在 R Studio 的数据框中,但它一直告诉我找不到函数“ReadHTMLTable”。我不明白我哪里做错了。有人可以花很多时间告诉我如何解决这
我正在尝试从此网站抓取数据 Extra Skater 进入数据框。从 HTML 代码中我可以看出,有多个行类,您可以通过它们切换以显示不同的表行。我只对具有标签的行感兴趣: 例如: 5v5
我正在尝试在 R 中检索 SGX 网站的价格。 myUrl="http://www.sgx.com/wps/portal/sgxweb/home/marketinfo/securities/etfs/
假设我有一个包含多个 的 HTML 表格,这we know is perfectly legal HTML , 并尝试用 readHTMLTable 读取它如下: library(XML) tabl
这个问题在这里已经有了答案: Extract links from html table (2 个答案) 关闭 9 年前。 我有一个 XMLNodeSet 对象,它包含一个带超链接的 HTML 表格
我正在使用 XML 包将芝加哥马拉松比赛的结果抓取到 CSV 文件中。问题是该站点只能在单个页面上显示 1,000 个运行者,因此我必须抓取多个页面。到目前为止,我编写的脚本适用于第一页: rm(li
我一般在 readHTMLTable 和 XML 包中遇到编码问题。我想从波兰网站 allegro.pl(类似于 ebay 的拍卖网站)下载一些表格,但之后,波兰字体存在编码问题,即使我在中使用 en
过去,我已经能够使用 R 中的 readHTMLTable 来提取一些足球统计数据。今年再次尝试这样做时,表格没有显示,即使它们在网页上可见。这是一个例子:http://www.pro-footbal
SO 上有关于如何使用 XML 包中的 readHTMLTable 的很好的答案,我用常规的 http 页面做到了,但是我无法用 https 页面解决我的问题。 我正在尝试读取此网站上的表格(url
我正在尝试从单个 html 表中抓取/提取数据:http://www.theplantlist.org/tpl/record/kew-419248和一些非常相似的页面。我最初尝试使用以下函数来读取表格
我是一名优秀的程序员,十分优秀!