网页搜集显着名称

问题描述 投票:0回答:1

我想要得到的

  • 性别
  • 种族或民族
  • 性取向
  • 占用
  • 国籍

来自这里列出的每个网站:https://www.nndb.com/lists/494/000063305/

这是一个individual site,所以观众可以看到单页。

我正在尝试在this site之后对我的R代码建模,但这很困难,因为在各个网站上没有针对性别的标题,例如。有人可以帮忙吗?

library(purrr)
library(rvest)
url_base <- "https://www.nndb.com/lists/494/000063305/"
b_dataset <- map_df(1:91, function(i) {
  page <- read_html(sprintf(url_base, i))
  data.frame(ICOname = html_text(html_nodes(page, ".name")))
})
r web-scraping
1个回答
1
投票

我会把你带到那里一半:从这里搞清楚并不难。

library(purrr)
library(rvest)
url_base <- "https://www.nndb.com/lists/494/000063305/"

首先,以下将生成A-Z姓氏列表URL列表,然后生成每个人的个人资料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"
...

虽然输出不干净,但在网页编写时很少发生 - 这实际上相对容易一些。您可以使用greplmap系列对您需要的内容进行子集化,并从中生成数据帧。

© www.soinside.com 2019 - 2024. All rights reserved.