You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用rvest抓取网页数据并生成保留嵌套结构的Data Frame

提取每本书的所有作者并生成以作者为维度的Data Frame

网页结构数据

books <- minimal_html('
  <div>
    <div class="book">
      <div class="booktitle">Book 1</div>
      <div class="year">1999</div>
      <div class="author">Author 1</div>
      <div class="author">Author 2</div>
      <div class="author">Author 3</div>
    </div>
    <div class="book">
      <div class="booktitle">Book 2</div>
      <div class="year">2022</div>
      <div class="author">Author 4</div>
    </div>
    <div class="book">
      <div class="booktitle">Book 3</div>
      <div class="year">1845</div>
      <div class="author">Author 5</div>
      <div class="author">Author 6</div>
      <div class="author">Author 7</div>
      <div class="author">Author 8</div>
    </div>    
  </div>')

需求说明

需要生成一个Data Frame(或tibble),以作者为维度,每行包含书名、年份、作者三个字段,最终共8行数据(对应所有作者)。

简便实现方案

利用rvest结合purrr的map_df函数,直接遍历每本书的节点,一次性提取对应数据并合并成目标格式,无需额外的遍历和格式转换:

library(rvest)
library(purrr)

result <- books %>%
  html_elements(".book") %>%
  map_df(function(book_node) {
    # 提取当前书的标题和年份
    title <- book_node %>% html_element(".booktitle") %>% html_text2()
    year <- book_node %>% html_element(".year") %>% html_text2()
    # 提取当前书的所有作者
    authors <- book_node %>% html_elements(".author") %>% html_text2()
    
    # 将当前书的信息与每个作者配对,生成tibble
    tibble(
      书名 = title,
      年份 = year,
      作者 = authors
    )
  })

# 查看结果
print(result)

代码说明

  • html_elements(".book"):先获取所有书籍节点;
  • map_df(...):遍历每个书籍节点,在节点内部提取对应数据,返回的每个小tibble会自动合并成最终的大Data Frame;
  • 每个书籍节点内,提取标题、年份后,提取所有作者,利用tibble的自动扩展特性,将标题和年份与每个作者一一配对,自然生成多行数据。

运行后得到的结果如下:

# A tibble: 8 × 3
  书名    年份  作者    
  <chr>   <chr> <chr>   
1 Book 1  1999  Author 1
2 Book 1  1999  Author 2
3 Book 1  1999  Author 3
4 Book 2  2022  Author 4
5 Book 3  1845  Author 5
6 Book 3  1845  Author 6
7 Book 3  1845  Author 7
8 Book 3  1845  Author 8

内容的提问来源于stack exchange,提问作者bill999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:44:52