-
Notifications
You must be signed in to change notification settings - Fork 0
/
extraccion_datos_guru.rb
79 lines (72 loc) · 2.77 KB
/
extraccion_datos_guru.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Realizado por Karina Ortega
require 'open-uri'
require 'nokogiri'
require 'csv'
class Skill
# métodos getters y setters
attr_accessor :avatar, :pais, :habilidades, :categoria, :costo_por_hora, :sueldo_anual
# se define el constructor de la clase Skill
def initialize(avatar, pais, habilidades, categoria, costo_por_hora, sueldo_anual)
@avatar = avatar
@pais = pais
@habilidades = habilidades
@categoria = categoria
@costo_por_hora = costo_por_hora
@sueldo_anual = sueldo_anual
end
# método registrar que recibe todos los atributos y los guarda en un archivo CSV
def registrar(skill)
# se abre el archivo tema.csv
CSV.open(skill + '.csv', 'a') do |csv|
# se almacenan los valores recibidos en el archivo
csv << [@avatar, @pais, @habilidades, @categoria, @costo_por_hora, @sueldo_anual]
end
end
end
class Scraper
def extraer(skill)
pagina = 1
url = 'https://www.guru.com/d/freelancers/'
url += 'skill/' + skill
(1..3).each do |i|
link = url + "/pg/#{i}/"
document = open(link)
content = document.read
parserd_content = Nokogiri::HTML(content)
puts '********* Extrayendo los datos ************'
parserd_content.css('.cozy > li').each do |row|
avatarinfo = row.css('.avatarinfo h3 a').text.strip
pais= row.css('.freelancerAvatar__location--country').inner_text
habilidades = row.css('.serviceListing__title a').inner_text.strip
categorias = row.css('.skillsList__skill a').text.strip.gsub(/\n/, " ")
categoria = categorias[0..25]
costo = row.css('.serviceListing__details .serviceListing__rates').text.strip.gsub(/\n/, " ")
costo_por_hora = costo[1..2]
if (costo[2] == "/")
costo_por_hora = costo[1]
end
sueldo = row.css('.earnings .earnings__amount').inner_text
sueldo_anual = sueldo.delete(',').to_i
puts "Avatar freelancer: #{avatarinfo}"
puts "pais: #{pais}"
puts "Habilidades: #{habilidades}"
puts "Categoria: #{categoria}"
puts "Costo por hora: #{costo_por_hora}"
puts "Salario anual: #{sueldo_anual}"
habilidad = Skill.new(avatarinfo, pais, habilidades, categoria, costo_por_hora, sueldo_anual)
habilidad.registrar(skill)
puts '---------------------------------------------------------------------------'
end
end
end
end
puts 'Habilidades'
puts 'AngularJs - CSS - CSS3 - Design - Drupal - Full Stack - HTML -
JQuery - Magento - Node.js - MySQL - Shopify Developer'
puts 'Ingrese una habilidad: '
habilidad = gets.chomp
nombre_archivo = habilidad + '.csv'
CSV.open(nombre_archivo, 'w') do |csv|
csv << %w[avatar pais habilidades categoria costo_por_hora sueldo_anual]
end
scrap = Scraper.new.extraer(habilidad)