Ошибка: неверный тип индекса «список» (Webscraping) - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь отсканировать данные по следующему адресу: https://university.careers360.com/colleges/list-of-degree-colleges-in-India Я хочу нажать на название каждого колледжа и получить конкретные данные для каждого колледжа.

Первое, что я сделал, былособрать все URL-адреса колледжа в векторе -:

#loading the package:
library(xml2)
library(rvest)
library(stringr)
library(dplyr)

#Specifying the url for desired website to be scrapped
baseurl <- "https://university.careers360.com/colleges/list-of-degree-colleges-in-India"

#Reading the html content from Amazon
basewebpage <- read_html(baseurl)

#Extracting college name and its url
scraplinks <- function(url){
   #Create an html document from the url
   webpage <- xml2::read_html(url)
   #Extract the URLs
   url_ <- webpage %>%
   rvest::html_nodes(".title a") %>%
   rvest::html_attr("href")  
   #Extract the link text
   link_ <- webpage %>%
   rvest::html_nodes(".title a") %>%
   rvest::html_text()
   return(data_frame(link = link_, url = url_))
}

#College names and Urls
allcollegeurls<-scraplinks(baseurl)

#Reading the each url
library(purrr)    
allreadurls<-map(allcollegeurls$url, read_html)

Работает нормально до сих пор, но когда я пишу следующий код, он показывает ошибку.

#Specialization
#Using CSS selectors to scrap the specialization section
allcollegeurls$Specialization<-NA
for (i in allreadurls) {
  allcollegeurls$Specialization[i] <- html_nodes(allreadurls[i][],'td:nth- 
  child(1)')
}

Error in allreadurls[i] : invalid subscript type 'list'

1 Ответ

0 голосов
/ 04 февраля 2019

Я не уверен насчет самого очищенного содержимого, но вы можете заменить цикл на

for (i in 1:length(allreadurls)) {
  allcollegeurls$Specialization[i] <- html_nodes(allreadurls[i][],'td:nth-child(1)')
}

Одной из проблем вашего подхода было несоответствие роли i:принимает значения в allreadurls, но затем используется для подмножества Specialization и allreadurls.Другая проблема заключалась во всех лишних пробелах в

'td:nth- 
  child(1)'

Наконец, поскольку allreadurls - это список, вы хотите задать для него значение [[i]], а не [i] (который снова возвращает список).Наконец, нет необходимости в [].

...