Home Forum Statistica con R Read_html e importazioni dati da url

Questo argomento contiene 5 risposte, ha 2 partecipanti, ed è stato aggiornato da  Borbottio98 6 giorni, 17 ore fa.

Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
  • Autore
    Articoli
  • #7495

    Borbottio98
    Partecipante

    Buonasera,
    sto facendo un progetto di metodi esplorativi e sto avendo un po’ di difficoltà col codice.
    Praticamente utilizzando la funzione read_html mi dice che il file che metto in input deve avere lunghezza 1, quindi in poche parole posso inserire soltanto un url alla volta, però dovrei prendere i dati da 7 url diverse, quindi la funzione verrebbe molto lunga, c’è un modo per inserire più url in read_html o esiste un’alternativa che lo permetta?
    Vi ringrazio anticipatamente per la risposta e metto qui sotto una parte di codice per farvi capire:

    dataset<-function(url1,url2){
    webpage1 <- read_html(url1)
    webpage2 <- read_html(url2)
    posizione1 <- html_nodes(webpage1,'.number')
    posizione1<-html_text(posizione1)
    posizione2 <- html_nodes(webpage2,'.number')
    posizione2<-html_text(posizione2)
    posizione<-c(posizione1,posizione2)}

    Qui ad esempio dovevo solo analizzare 2 url, però già così ho raddoppiato la grandezza del codice, vorrei invece trovare un modo per inserire con read_html tutti gli url o trovare una funzione che sostituisca read_html e che faccia lo stesso, anche perché per 7 url è infinito il codice.

    #7496

    Borbottio98
    Partecipante

    EDIT: ho usato read_lines e lo legge, solo che per html_nodes/node dà come errore l’uso di un oggetto in formato carattere:

    Error in UseMethod("xml_find_first") : 
      no applicable method for 'xml_find_first' applied to an object of class "character"

    come posso risolvere?

    #7497

    Borbottio98
    Partecipante

    Secondo edit: ho capito che il primo edit non era la soluzione corretta e ho visto che usando una funzione for i si risolve tutto molto più velocemente, solo che non riesco a farla funzionare bene

    • Questa risposta è stata modificata 2 settimane, 2 giorni fa da  Borbottio98.
    #7499

    Borbottio98
    Partecipante

    Piccolo aggiornamento:

    url1a<-"https://www.goodreads.com/list/show/1.Best_Books_Ever"
    url2a<-"https://www.goodreads.com/list/show/1.Best_Books_Ever?page=2"
    c<-c(url1a,url2a)
    for ( i in c ) {
      url<-paste0(i)
      page<- read_html(url) 
      posizione<-html_nodes(page, ".number")
      posizione<-html_text(posizione)}

    Sono riuscito a fare questo, solo che le prime 100 posizioni vengono sovrascritte dalle
    altre 100, come posso risolvere?

    #7500

    pdeninis
    Partecipante

    Premetto che non ho mai usato quelle funzioni.
    Prova così:

    elenco_completo<-NULL
    for ( i in c ) {
    url<-paste0(i)
    page<- read_html(url)
    posizione<-html_nodes(page, “.number”)
    posizione<-html_text(posizione)
    elenco_completo<-c(elenco_completo,posizione)}

    Ora la variabile da consultare è elenco_completo.

    Paolo

    • Questa risposta è stata modificata 1 settimana, 1 giorno fa da  pdeninis.
    • Questa risposta è stata modificata 1 settimana, 1 giorno fa da  pdeninis.
    • Questa risposta è stata modificata 1 settimana, 1 giorno fa da  pdeninis.
    • Questa risposta è stata modificata 1 settimana, 1 giorno fa da  pdeninis.
    #7505

    Borbottio98
    Partecipante

    Ho risolto qualche giorno fa, solo che non riuscivo ad eliminare il post, in ogni caso grazie mille!
    La soluzione che avevo trovato era differente, ma comunque ugualmente efficace, il codice era questo per chi fosse interessato:

    var_imp<-function(url,css,num){
      myData = lapply(url, function(x){
        page = read_html(x)
        a = html_nodes(page, css)
        a<-html_text(a)
      })
      if(missing(num)){num="FALSE"}
      if(isTRUE(num)){
        k<-unlist(myData)
        parse_number(k)
      } else
      unlist(myData)
    }

    Qui ho utilizzato “num” perché dovevo applicare parse_number in alcune variabili e per rendere il codice da consegnare il più pulito possibile ho usato questa funzione.

    • Questa risposta è stata modificata 6 giorni, 17 ore fa da  Borbottio98.
Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)

Devi essere loggato per rispondere a questa discussione.