【发布时间】:2016-08-31 21:46:00
【问题描述】:
以下脚本允许我访问一个包含多个名称相似的链接的网站。我只想得到其中一个,因为它在网站上以 bold 打印,因此可以与其他区别开来。但是,我找不到在列表中选择粗体链接的方法。
有人对此有意见吗? 提前致谢!
library(httr)
library(rvest)
sp="Alnus japonica"
res <- httr::POST(url ="http://apps.kew.org/wcsp/advsearch.do",
body = list(page ="advancedSearch",
AttachmentExist ="",
family ="",
placeOfPub ="",
genus = unlist(strsplit(as.character(sp), split=" "))[1],
yearPublished ="",
species = unlist(strsplit(as.character(sp), split=" "))[2],
author ="",
infraRank ="",
infraEpithet ="",
selectedLevel ="cont"),
encode ="form")
pg <- content(res, as="parsed")
lnks <- html_attr(html_nodes(pg,"a"),"href")
#how get the url of the link wth accepted name (in bold)?
res2 <- try(GET(sprintf("http://apps.kew.org%s", lnks[grep("id=",lnks)] [1])),silent=T)
#this gets a link but often fails to get the bold one
【问题讨论】:
-
这在很大程度上取决于它是如何加粗的。如果是内联样式,那很容易,但它可能是将 CSS 应用于特定的 id 或类,这意味着要深入研究代码。
-
如果你手动搜索,你确实会得到一个
<b>标签,但它似乎没有出现在httr结果中,所以它必须在事后以某种方式插入。 -
链接被
<b>标签包围,所以你应该能够以这种方式获得它们。就像 alistaire 说的,不知道为什么httr会删除它们(我对httr没有经验,可能有一个选项......) -
libxml2(支持rvest和XML)不如浏览器灵活。在<p>之外的<b>在技术上是无效的HTML/XML,libxml2以这种方式解析它。