¿Qué es hacer scrapping?
Clase 26 de 34 • Curso de Ruby 2017
Contenido del curso
Clase 26 de 34 • Curso de Ruby 2017
Contenido del curso
Lenyn Alcantara
Oscar Téllez
Lenyn Alcantara
Nathaly Stefani Riaño Bejarano
Felipe Eduardo Galindo Hernández
Ruben Eduardo Acosta Vela
Ruben Eduardo Acosta Vela
Diego Forero
Dejo una versión que avanza de página si encuentra una página a la cuál avanzar.
require 'nokogiri' require 'open-uri' url = 'http://www.reactiongifs.com/' posts = [] moreEntries = true while moreEntries do puts "Chequeando: #{url}" puts '-------------------------' document = Nokogiri::HTML(open(url)).css('div#main') document.css('div.post').each do |post| gif = {:title => post.css('h2 > a').text, :img => post.css('img').attr('src')} posts << gif end moreEntries = document.css('div.nav-entries > div.nav-next').count > 0 ? true : false if moreEntries then url = document.css('div.nav-entries > div.nav-next > a').attr('href') end end
P.D: debo decir que tiene una falla en la página 13, parece que no hubiera etiqueta img con su atributo ‘src’, pero por tiempo no estoy revisando que es, vamos a ver si ayuda alguien a solventar la falla._
La falla es porque no existe la imagen. Aparece en la web pero es un contenido embebido por lo que la estructura que buscamos no existe en ese post.
Con esta pequeña modificación he llegado al menos hasta la pagina 400 y algo sin ninguna falla:
require 'nokogiri' require 'open-uri' url = 'http://www.reactiongifs.com/' posts = [] moreEntries = true while moreEntries do puts "Chequeando: #{url}" puts '-------------------------' document = Nokogiri::HTML(open(url)).css('div#main') document.css('div.post').each do |post| unless post.css('img').empty? gif = {title: post.css('h2').text, img: post.css('img').attr('src')} posts << gif puts gif[:title] puts gif[:img] end end moreEntries = document.css('div.nav-entries > div.nav-next').count > 0 ? true : false if moreEntries then url = document.css('div.nav-entries > div.nav-next > a').attr('href') end end
Excelente @oscartzgz, gracias por ayudar con la falla.
Web Scraping es el proceso de extracción de información de los recursos que se encuentran en la World Wide Web y la clasificación de datos no estructurados (generalmente se encuentran en páginas HTML) en forma estructurada, como hojas de cálculo o tablas de bases de datos.
Woow! me pareció muy interesante esta clase, creo que esto de hacer scrapping me va a ser de utilidad…
Al instalar la gema me sale este error:
Fetching: mini_portile2-2.3.0.gem (100%)
Successfully installed mini_portile2-2.3.0
Fetching: nokogiri-1.8.2.gem (100%)
Building native extensions. This could take a while…
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
.
.
.
.
/usr/lib/ruby/2.3.0/mkmf.rb:456:in `try_do’: The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
Lo curioso es que la encontre en el Synaptic de Debian, y desde allí si la instalo bien. 😃
Te faltan las herramientas de desarrollo para tu sistema, esto permite hacer tareas de compilación, cuando lo instalas de synaptic ya descargas el binario, pero para el ruby general no para un proyecto en particular, es bueno que instales las devtools dependiendo de tu sistema.