gpt4 book ai didi

r - R如何检查XPath是否存在

转载 作者:行者123 更新时间:2023-12-03 17:03:55 26 4
gpt4 key购买 nike

希望有人比我更有知识,可以在这里给我一些启示。

作为较大的网络抓取工具的一部分,我想从一组页面中提取元数据。当我运行它时,它崩溃了,调查表明这是由于请求的Xpath之一不存在。

我可以看到一个潜在的解决方案是将页面的所有meta都捕获到向量中,并在构建仅我想要的向量的新向量之前检查是否存在每个所需的元数据。



如果我只抓住我想要的位(如果它们存在于页面中),那就更好了。

require(XML)
require(RCurl)
parsed <- htmlParse("http://www.coindesk.com/information")

meta <- list()
meta[1] <- xpathSApply(parsed, "//meta[starts-with(@property, \"og:title\")]", xmlGetAttr,"content")
meta[2] <- xpathApply(parsed, "//meta[starts-with(@property, \"og:description\")]", xmlGetAttr,"content")
meta[3] <- xpathApply(parsed, "//meta[starts-with(@property, \"og:url\")]", xmlGetAttr,"content")
meta[4] <- xpathApply(parsed, "//meta[starts-with(@property, \"article:published_time\")]", xmlGetAttr,"content")
meta[5] <- xpathApply(parsed, "//meta[starts-with(@property, \"article:modified_time\")]", xmlGetAttr,"content")


由于 og:description不在此页面中,因此将引发错误。

Error in meta[2] <- xpathApply(parsed, "//meta[starts-with(@property, \"og:description\")]",  : 
replacement has length zero


谁能建议一个简单的测试,在尝试提取它之前检查它的存在,并且可能会以NULL响应优雅地掉下来?

最佳答案

假设当您尝试处理空列表时出现错误...

> parsed <- htmlParse("http://www.coindesk.com/information")
> meta <- xpathApply(parsed, "//meta[starts-with(@property, \"og:description\")]", xmlGetAttr,"content")
> meta
list()
> length(meta)==0
[1] TRUE


然后测试 length(meta)==0-如果缺少元素,则为 TRUE。否则,其 FALSE-如以下提取title属性的示例所示:

> meta <- xpathApply(parsed, "//meta[starts-with(@property, \"og:title\")]", xmlGetAttr,"content")
> meta
[[1]]
[1] "Beginner's guide to bitcoin - CoinDesk's Information Center"

> length(meta)==0
[1] FALSE

关于r - R如何检查XPath是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com