首页 > 解决方案 > 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 和网络抓取的新手(必须为我当前的项目快速学习这一点)。

更新

下面的答案很完美。

标签: rweb-scrapingrvest

解决方案


我不确定电子邮件地址是否总是与最后一个位置的作者匹配。因为当我打开 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 日创建


推荐阅读