Я отвезу тебя на полпути: отсюда не так уж сложно разобраться.
library(purrr)
library(rvest)
url_base <- "https://www.nndb.com/lists/494/000063305/"
Во-первых, следующее сгенерирует список URL-адресов списка фамилий A-Z, а затем, следовательно, URL-адреса профиля каждого человека.
## Gets A-Z links
all_surname_urls <- read_html(url_base) %>%
html_nodes(".newslink") %>%
html_attrs() %>%
map(pluck(1, 1))
all_ppl_urls <- map(
all_surname_urls,
function(x) read_html(x) %>%
html_nodes("a") %>%
html_attrs() %>%
map(pluck(1, 1))
) %>%
unlist()
all_ppl_urls <- setdiff(
all_ppl_urls[!duplicated(all_ppl_urls)],
c(all_surname_urls, "http://www.nndb.com/")
)
Вы правы - на самом деле не существует отдельных заголовков для пола или любого другого. Вам просто нужно использовать такие инструменты, как SelectorGadget, чтобы увидеть, какие элементы содержат то, что вам нужно. В этом случае это просто p
.
all_ppl_urls[1] %>%
read_html() %>%
html_nodes("p") %>%
html_text()
Вывод будет
[1] "AKA Lee William Aaker"
[2] "Born: 25-Sep-1943Birthplace: Los Angeles, CA"
[3] "Gender: MaleRace or Ethnicity: WhiteOccupation: Actor"
[4] "Nationality: United StatesExecutive summary: The Adventures of Rin Tin Tin"
...
Несмотря на то, что выходные данные не чистые, при веб-копировании вещи редко бывают, на самом деле это относительно проще. Вы можете использовать серии grepl
и map
для подмножества содержимого, которое вам нужно, и сделать из него фрейм данных.