извлечь текст псевдосписка из тега p - PullRequest
0 голосов
/ 02 августа 2020
• 1000 * тег? Ничего страшного, если она не сочетается с вызовом ul ui, я могу запускать функцию несколько раз.

введите описание изображения здесь

Я использую эту функцию для извлечения текста, возможно, вы могли бы добавить решение в вызов html_nodes:

link_df_reprex <- tribble(~title, ~episode, ~link,
                   "a", "1", "https://www.backlisted.fm/episodes/1-j-l-carr-a-month-in-the-country",
                   "b", "2", "https://www.backlisted.fm/episodes/2-jean-rhys-good-morning-midnight",
                   "c", "3", "https://www.backlisted.fm/episodes/3-david-nobbs-1",
                   "d", "4", "https://www.backlisted.fm/episodes/67-willa-cather-my-ntonia", 
                   "e", "5", "https://www.backlisted.fm/episodes/66-sebastian-faulks-the-fatal-englishman")

recs_extract <- function(df){
  
  pages <- df %>% map(read_html, url = link)
  
  pages_text <- pages %>% 
    map_dfr(. %>% 
              html_nodes(css = "ul li") %>%
              html_text() %>% 
              tibble(text = .)

    )
  
}

#works for first 3
link_df_reprex %>% slice(1:3) %>% mutate(data = suppressWarnings(map(link, recs_extract)))

#doesn't work for last 2, extracts different text:
link_df_reprex %>% slice(4:5) %>% mutate(data = suppressWarnings(map(link, recs_extract))) %>% unnest()

1 Ответ

1 голос
/ 02 августа 2020

Попробуйте следующее:

library(rvest)
library(tibble)
library(dplyr)
library(purrr)
library(tidyr)
link_df_reprex <- tribble(~title, ~episode, ~link,
                          "a", "1", "https://www.backlisted.fm/episodes/1-j-l-carr-a-month-in-the-country",
                          "b", "2", "https://www.backlisted.fm/episodes/2-jean-rhys-good-morning-midnight",
                          "c", "3", "https://www.backlisted.fm/episodes/3-david-nobbs-1",
                          "d", "4", "https://www.backlisted.fm/episodes/67-willa-cather-my-ntonia", 
                          "e", "5", "https://www.backlisted.fm/episodes/66-sebastian-faulks-the-fatal-englishman")

recs_extract <- function(df){
  
  pages <- df %>% map(read_html, url = link)
  
  pages_text <- pages %>% 
    map_dfr(. %>% 
              html_nodes(xpath = "//div[@class='sqs-block-content']/descendant::p[contains(., 'Books mentioned:') or contains(., 'Books Mentioned:')]/following-sibling::*/descendant::a/parent::*") %>%
              html_text() %>% 
              tibble(text = .)
            
    )
  
}

link_df_reprex %>% mutate(data = suppressWarnings(map(link, recs_extract))) %>% unnest()
...