【问题标题】:Obtaining hrefs from main page using rvest (SelectorGadget and inspecting source code)使用 rvest 从主页获取 href(SelectorGadget 和检查源代码)
【发布时间】:2021-05-05 15:24:39
【问题描述】:

我正在使用 rvest 抓取网站 (here)。我正在尝试获取列出的所有 582 个人的 URL。例如,其中一个人的 URL 是here

一旦我进入一个单独的 URL,我就能够成功地抓取我正在寻找的信息。这是一个例子:

link = "https://www.supercluster.com/astronauts/jessica-u.-meir?sort=&ascending=false&life%20form=human&"

page = read_html(link)

# Time in space and spacewalk time
page %>% html_nodes("span.pr015")

# Gender
page %>% html_nodes("a.under")

# Cross Karman Line
page %>% html_nodes("div.pt1.pb0.h5.caps.cw")

关于如何使用rvest从主页获取582个URL列表有什么建议吗?我尝试使用 SelectorGadget 并检查源代码 - 但无济于事。感谢您的帮助!

【问题讨论】:

  • 你在主页上尝试了什么,你得到了什么?
  • 查看检查器中的网络选项卡。此数据是动态加载的。您可能可以在网络选项卡中找到正确的请求,直接使用 rvest 下载 JSON 数据。

标签: r web-scraping rvest rselenium


【解决方案1】:

因为这是使用 javascript 动态加载的,所以您必须考虑是否可以访问数据的来源。使用 Chrome/Firefox 中的网络检查器,您可以查看网站加载时加载的所有数据源。

从那里可以看到所有宇航员的名单来自以下数据源:https://supercluster-iadb.s3.us-east-2.amazonaws.com/adb.json

同样,您可以看到可以从https://www.supercluster.com/page-data/astronauts/vladimir-dzhanibekov/page-data.json 获取更多详细信息,使用 GET 请求跳过当前脚本的“抓取”部分。这也使您的请求更快,并且使用的数据更少。但是您必须弄清楚这些链接,因为这是一个单独的问题。

library(dplyr)
library(rvest)
library(httr)
library(jsonlite)

list_astro <- httr::GET("https://supercluster-iadb.s3.us-east-2.amazonaws.com/adb.json")

list_astro <- rawToChar(list_astro$content)

list_astro_parsed <- jsonlite::fromJSON(list_astro)

create_links <- tibble(
  astronauts = list_astro_parsed$astronauts$name,
  slug = list_astro_parsed$astronauts$slug$current
) %>%
  mutate(
    page_link = paste0("https://www.supercluster.com/astronauts/",slug)
  )
create_links
# A tibble: 910 x 3
#   astronauts            slug                  link                                                         
#   <chr>                 <chr>                 <chr>                                                        
# 1 Yuri Gagarin          yuri-gagarin          https://www.supercluster.com/astronauts/yuri-gagarin         
# 2 Walter M. Schirra Jr. walter-m.-schirra-jr. https://www.supercluster.com/astronauts/walter-m.-schirra-jr.
# 3 Georgi Ivanov         georgi-ivanov         https://www.supercluster.com/astronauts/georgi-ivanov        
# 4 Leonid Popov          leonid-popov          https://www.supercluster.com/astronauts/leonid-popov         
# 5 Bertalan Farkas       bertalan-farkas       https://www.supercluster.com/astronauts/bertalan-farkas 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多