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

html – 在R中标识粗体的网络链接,第1张

概述以下脚本允许我访问具有多个具有相似名称的链接的网站.我想只得到其中一个,因为它在网站上以粗体显示,可以与其他人区别开来.但是,我找不到在列表中选择粗体链接的方法. 有人会对此有所了解吗? 提前致谢! library(httr)library(rvest)sp="Alnus japonica"res <- httr::POST(url ="http://apps.kew.org/wcsp/a 以下脚本允许我访问具有多个具有相似名称的链接的网站.我想只得到其中一个,因为它在网站上以粗体显示,可以与其他人区别开来.但是,我找不到在列表中选择粗体链接的方法.

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

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>因为他们需要防d. 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" 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上停留一段时间.

总结

以上是内存溢出为你收集整理的html – 在R中标识粗体的网络链接全部内容,希望文章能够帮你解决html – 在R中标识粗体的网络链接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1133113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存