网页抓取:如何提取网页超链接中的文本(名称)



我是编程和r的新手,请我需要一点帮助。我的请求如此简单(我知道,我感到羞愧),因为你会很快解决。我正在做一个入侵植物物种的项目,我需要这个列表中的植物物种名称列表:http://www.issg.org/database/species/List.asp

物种的名称是超链接,我如何将名称提取到数据框或表中?

我一直在使用下面的代码提取链接,但是链接中的文本没有物种的名称:

url <- "http://www.issg.org/database/species/List.asp"
doc <- htmlParse(url)
links <- xpathSApply(doc, "//a/@href")

的链接文本是这样的:第一种(例如"ecology.asp?si=1590&fr=1&sts=&lang=EN")第二种(例如"ecology.asp?si=1043&fr=1&sts=&lang=EN")…

只是对@jdharrison的精彩回答的一个小小的、微不足道的修改。

library(XML)
url <- "http://www.issg.org/database/species/List.asp"
doc <- htmlParse(url)
links <- doc["//a[contains(@href,'ecology.asp?')]"]
df    <- data.frame(names=sapply(links,xmlValue))
head(df)
#                   names
# 1 Abelmoschus moschatus
# 2     Abrus precatorius
# 3       Acacia concinna
# 4        Acacia confusa
# 5     Acacia farnesiana
# 6     Acacia longifolia

所以你不需要使用xpathApply(...);您可以使用[...]中的XPath为XMLInternalDocument对象"索引"。

links <- doc["//a[contains(@href,'ecology.asp?')]"]

生成满足XPath查询条件的节点的列表。然后,您可以使用sapply(...)xmlValue(...)函数"应用"到列表中的每个元素。

df    <- data.frame(names=sapply(links,xmlValue))

我们使用sapply(...),因为我们想要一个向量的结果,并在调用data.frame(...)时将其转换为您要求的数据帧。

最后,我忍不住要评论一下"感到羞耻"这件事(尽管我肯定我会后悔的……)。你的问题提出得很好,很简洁,有一个代码示例,你提供了你的数据集(通过链接),你清楚地说明了你想要的结果。我在SO上看到的不到1%的问题是这样的,所以你应该感到相反的羞耻。

您可以在锚标记中搜索字符串ecology.asp?,然后提取元素文本和href属性

url <- "http://www.issg.org/database/species/List.asp"
library(XML)
doc <- htmlParse(url)
links <- xpathApply(doc, "//a[contains(@href,'ecology.asp?')]"
                     , function(x){
                       data.frame(name = xmlValue(x), href = xmlGetAttr(x, "href"))
                     })
> head(do.call(rbind.data.frame, links))
name                                  href
1 Abelmoschus moschatus   ecology.asp?si=15&fr=1&sts=&lang=EN
2     Abrus precatorius ecology.asp?si=1609&fr=1&sts=&lang=EN
3       Acacia concinna ecology.asp?si=1343&fr=1&sts=&lang=EN
4        Acacia confusa  ecology.asp?si=191&fr=1&sts=&lang=EN
5     Acacia farnesiana   ecology.asp?si=49&fr=1&sts=&lang=EN
6     Acacia longifolia ecology.asp?si=1662&fr=1&sts=&lang=EN

相关内容

  • 没有找到相关文章

最新更新