Как очистить несколько веб-сайтов с помощью Rcrawler в R?

#r #web-scraping #rcrawler

#r #соскабливание полотна #rcrawler #очистка веб-страниц

Вопрос:

Я заметил, что у нас здесь не так много вопросов о Rcrawler, и я подумал, что это отличный инструмент для очистки веб-сайта. Тем не менее, у меня есть проблема с указанием ему очистить несколько веб-сайтов, поскольку в настоящее время он может выполнять только 3. Пожалуйста, дайте мне знать, если у кого-нибудь есть опыт работы с этой проблемой. Спасибо.

Я попытался поместить все URL-адреса в список / вектор, но это по-прежнему не помогает. Вот мои коды очистки для получения названия, описания и ключевых слов веб-сайтов.

 Rcrawler(Website = c("http://www.amazon.com", "www.yahoo.com", "www.wsj.com"),
 no_cores = 3, no_conn = 3, MaxDepth = 0, 
ExtractXpathPat = c('/html/head/title', '//meta[@name="description"]/@content', '//meta[@name="keywords"]/@content'),
 PatternsName = c("Title", "Description", "Keywords"), saveOnDisk = FALSE)
  

Если у меня более 3 веб-сайтов, это выдаст мне эту ошибку:

 Error in Rcrawler(Website = c("http://www.amazon.com", "www.yahoo.com",  : 
  object 'getNewM' not found
  

Комментарии:

1. Возможно, вам потребуется обернуть ваш код в какую-либо функцию и передать его фреймворку, который может обрабатывать несколько ядер.

Ответ №1:

Что-то вроде этого.

 library(tidyverse)
library(rvest)

# Create vector
mylist <- c("http://www.amazon.com", "http://www.yahoo.com", "http://www.wsj.com")
# Create the for statement
for (i in mylist)
{ 
  #print(i)
  webpage <- read_html(i)
  print(webpage)

}
  

Или загрузите каждую страницу в список и проанализируйте список. Наконец, вы можете рассмотреть возможность сохранения ваших результатов в формате CSV. Вы должны знать, что очистка множества разных веб-страниц почти наверняка приведет к совершенно разным результатам. Я могу с уверенностью понять, почему человек хотел бы перебирать разные URL-адреса одного и того же сайта, но я не уверен, что вы получите, просматривая разные URL-адреса разных сайтов.

Ответ №2:

Я не уверен, как это будет работать в теории, но вы можете попробовать создать множество вызовов R crawler.
Например, в цикле while:

 a <- list()

Rcrawler_function <- function(no_conn,no_cores,MaxDepth ,Obeyrobots,saveOnDisk,ExtractXpath)
{
  x <- 1
  while(x < 5)
  {
    tryCatch( expr = {

  Rcrawler(ads_txt_4_cat$gen_link[x],no_conn = no_conn,no_cores = no_cores,MaxDepth = MaxDepth,Obeyrobots = Obeyrobots,saveOnDisk = saveOnDisk,ExtractXpathPat = ExtractXpath)
   assign("DATA",DATA,envir = globalenv())
     a[[x]] <<- DATA
    x = x 1


    }
  , error=function(e){cat("ERROR :",conditionMessage(e), "n")})
  }
}

Rcrawler_function(4,4,0,T,F,"body")