Сканирование по Интернету в R с помощью Tidyverse / Rvest_implement a для l oop, чтобы извлечь все ссылки из нескольких страниц индекса - PullRequest
0 голосов
/ 27 марта 2020

Я собираю данные с веб-сайта, и мне нужно реализовать для l oop функцию, которая позволит мне извлекать ссылки на несколько страниц индекса. Следующий код позволяет мне собирать данные с одной индексной страницы:

    library(tidyverse)
    library(rvest)

    ptt.url <- "https://www.ptt.cc/bbs/Gossiping"
    ptt.url

    gossiping.session <- html_session(ptt.url)

    gossiping.form <- gossiping.session %>%
         html_node("form") %>%
         html_form

    gossiping <- submit_form( #starts an html session
         session = gossiping.session,
         form = gossiping.form,
         submit = "yes"
         )

    gossiping

    page.latest <- gossiping %>%
         html_nodes("a") %>% # extract all <a> elements
         html_attr("href") %>%  # extract the attributes `href`
         str_subset("index[0-9]{2,}\\.html") %>% # find the `href` with the index number
         str_extract("[0-9]+") %>% # extract the number
         as.numeric()
    page.latest

    link <- str_c(ptt.url, "/index", page.latest, ".html")

    links.article <- gossiping %>%
         jump_to(link) %>% # move session to the most recent page
         html_nodes("a") %>% # extract article <a>
         html_attr("href") %>% # extract article `<href>` attributes
         str_subset("[A-z]\\.[0-9]+\\.[A-z]\\.[A-z0-9]+\\.html") %>% # extract links
         str_c("https://www.ptt.cc",.)
    links.article

Это устанавливает самую последнюю страницу на форуме, а затем извлекает ссылки на этой странице. Я хочу извлечь все ссылки с нескольких страниц. Я могу установить диапазон в объекте '' 'link' '' следующим образом:

    link <- str_c(ptt.url, "/index", (page.latest-2):(page.latest), ".html")

Однако последняя и самая неприятная часть для меня - это то, что у меня есть функция, в которую мне нужно ввести для l oop:

    extract_art_links <- function(index_page, session){
          links.article <- session %>%
              jump_to(index_page) %>%
              html_nodes("a") %>%
              html_attr("href") %>%
              str_subset("[A-z]\\.[0-9]+\\.[A-z]\\.[A-z0-9]+\\.html") %>%
              str_c("https://www.ptt.cc",.)

     return(links.article)
  }

Это то, что я думаю, мне нужно сделать. Любой берущий?

...