如何解决使用 rvest 从主页获取 hrefsSelectorGadget 和检查源代码
我正在使用 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 并检查源代码 - 但无济于事。感谢您的帮助!
解决方法
因为这是使用 javascript 动态加载的,所以您必须考虑是否可以访问数据的来源。使用 Chrome/Firefox 中的网络检查器,您可以查看网站加载时加载的所有数据源。
从那里你可以看到所有宇航员的名单来自以下数据源:https://supercluster-iadb.s3.us-east-2.amazonaws.com/adb.json
同样,您可以看到可以使用 GET 请求从 https://www.supercluster.com/page-data/astronauts/vladimir-dzhanibekov/page-data.json 获取更多详细信息,以跳过当前脚本的“抓取”部分。这也使您的请求更快,并且使用的数据更少。但是您必须弄清楚这些链接,因为这是一个单独的问题。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。