r - R:用于提取嵌套节点内容的 rvest 库
问题描述
这是期刊页面的链接:
https
://genomebiology.biomedcentral.com/articles/10.1186/s13059-018-1535-9
我正在尝试获取以下信息:作者单位(所有作者)、通讯作者和通讯作者的电子邮件。注意:假设通讯作者是文章顶部作者部分中列出的最后一位作者。我已经使用 SelectorGadget 来识别其他元素的一些标签,例如 Abstract 和 Publication Date,但我似乎无法弄清楚如何获得这三个。以下是我将作者作为字符向量的代码:
#url is the url for the list of articles on a particular page
s <- html_session(url)<br >
page <- s %>% follow_link(art) %>% read_html() <br >
str_replace_all(str_squish(page %>% html_nodes(".AuthorName") %>% html_text()), "[0-9]|Email author", "")<br >
这将返回一个包含所有作者的向量,在这种情况下,每个作者的长度为 8。但是现在我需要点击他们名字上的链接来获取从属关系和他们的电子邮件。我确信我需要的所有代码都在我面前,但我有点迷茫,因为我是 R 和网络抓取的新手(必须为我当前的项目快速学习这一点)。
更新
下面的答案很完美。
解决方案
我不确定电子邮件地址是否总是与最后一个位置的作者匹配。因为当我打开 Chrome 视图源时,我发现电子邮件地址不知何故位于一个独立列表的下方。
library(rvest)
#> 载入需要的程辑包:xml2
library(data.table)
library(tidyverse)
xml <- read_html('https://genomebiology.biomedcentral.com/articles/10.1186/s13059-018-1535-9')
xml %>%
html_nodes('.EmailAuthor') %>%
html_attr('href')
#> [1] "mailto:liuj@cs.uky.edu"
# get email address
xml %>%
html_nodes('.AuthorName') %>%
html_text
#> [1] "Ye<U+00A0>Yu" "Jinpeng<U+00A0>Liu" "Xinan<U+00A0>Liu" "Yi<U+00A0>Zhang"
#> [5] "Eamonn<U+00A0>Magner" "Erik<U+00A0>Lehnert" "Chen<U+00A0>Qian" "Jinze<U+00A0>Liu"
# get name
data.table(
name = xml %>%
html_nodes('meta') %>%
html_attr('name')
,content = xml %>%
html_nodes('meta') %>%
html_attr('content')
) %>%
# extract both name and affiliatation, because make show they are matched.
filter(name %in% c('citation_author_institution')) %>%
select(content)
#> content
#> 1 Department of Computer Science, University of Kentucky, Lexington, USA
#> 2 Department of Computer Science, University of Kentucky, Lexington, USA
#> 3 Department of Computer Science, University of Kentucky, Lexington, USA
#> 4 Department of Computer Science, University of Kentucky, Lexington, USA
#> 5 Department of Computer Science, University of Kentucky, Lexington, USA
#> 6 Seven Bridges Genomics Inc, Cambridge, USA
#> 7 Department of Computer Engineering, University of California Santa Cruz, Santa Cruz, USA
#> 8 Department of Computer Science, University of Kentucky, Lexington, USA
由reprex 包(v0.2.1)于 2018 年 11 月 2 日创建
推荐阅读
- javascript - 如何使用 Webpack 5 运行热重载 (HMR)?
- sql - SQL 中的块平均值
- java - 为什么我不能在 Java 的数组中分配 Arrays.sort() 的输出?
- java - 可嵌入类字段上的@Column(name="alternative") 使实体类中的@AttributeOverrides 没有必要?
- r - 使用 gt 包创建一个函数以在 R 中针对已批准和未批准的客户显示勾选和交叉?
- java - 这行中的 {0} double [] array = new double[] {0} 在 java 中做了什么?
- ios - 执行 UI 块时引发 React Native 异常:一个视图一次只能与一个视图控制器关联
- strapi - Strapi:谷歌提供商问题
- javascript - 使用 fetch api 和 express.js 后,我的按钮无法正常工作
- python - 释放所有键时如何触发pynput的GlobalHotkeys?