加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

html – 在R中标识粗体的网络链接

发布时间:2020-12-30 23:13:03 所属栏目:资源 来源:网络整理
导读:以下脚本允许我访问具有多个具有相似名称的链接的网站.我想只得到其中一个,因为它在网站上以粗体显示,可以与其他人区别开来.但是,我找不到在列表中选择粗体链接的方法. 有人会对此有所了解吗? 提前致谢! library(httr)library(rvest)sp="Alnus japonica"

以下脚本允许我访问具有多个具有相似名称的链接的网站.我想只得到其中一个,因为它在网站上以粗体显示,可以与其他人区别开来.但是,我找不到在列表中选择粗体链接的方法.

有人会对此有所了解吗?
提前致谢!

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

解决方法

首先,抓住 tidy-html5(它几乎适用于所有东西)并安装它并确保它在你的PATH中.

正如我的评论所说,浏览器处理< b>外部< p>因为他们需要防弹. libxml2没有.所以,我们需要首先清理它(我现在需要创建一个新的tidyhtml包),然后处理整理版本:

library(xml2)
library(httr)
library(rvest)

res <- httr::POST(url ="http://apps.kew.org/wcsp/advsearch.do",genus = "Alnus",species = "japonica",encode ="form") 

tf <- tempfile(fileext=".html")
cat(content(res,as="text"),file=tf)

tidy <- system2("tidy",c("-q",tf),TRUE)

pg <- read_html(paste0(tidy,sep="",collapse=""))

html_nodes(pg,xpath=".//p/b/a[contains(@href,'name_id')]")

## {xml_nodeset (1)}
## [1] <a href="/wcsp/namedetail.do?name_id=6471" class="onwa ...

如果需要CSS选择器而不是XPath:

html_nodes(pg,"p > b > a[href*='name_id']")

UPDATE

我为libtidy开始了一个基本的pkg包装器.如果您使用的是OS X并使用Homebrew,您可以执行:brew install tidy-html5(安装上面的二进制文件和libtidy库)和devtools :: install_github(“hrbrmstr / tidyhtml”)来安装pkg.然后,它只是:

library(xml2)
library(httr)
library(rvest)
library(htmltidy)

res <- httr::POST(url ="http://apps.kew.org/wcsp/advsearch.do",encode ="form") 

tidy_html <- tidy(content(res,as="text"))

pg <- read_html(tidy_html)

html_nodes(pg,"p > b > a[href*='name_id']")

我应该可以在Windows& linux并使它成为一个真正的软件包(它是一个没有错误检查的薄包装器)但是这将在TODO上停留一段时间.

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读