gpt4 book ai didi

html - 在 R 中以粗体标识网络链接

转载 作者:太空狗 更新时间:2023-10-29 13:44:23 25 4
gpt4 key购买 nike

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

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

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",
body = list(page ="advancedSearch",
AttachmentExist ="",
family ="",
placeOfPub ="",
genus = "Alnus",
yearPublished ="",
species = "japonica",
author ="",
infraRank ="",
infraEpithet ="",
selectedLevel ="cont"),
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 ...

如果需要通过 XPath 使用 CSS 选择器:

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

更新

我为 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",
body = list(page ="advancedSearch",
AttachmentExist ="",
family ="",
placeOfPub ="",
genus = "Alnus",
yearPublished ="",
species = "japonica",
author ="",
infraRank ="",
infraEpithet ="",
selectedLevel ="cont"),
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 中以粗体标识网络链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061873/

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