J'essaie d'analyser une page Web, de collecter des valeurs et de les stocker dans une base de données.Comment analyser les données associées et stocker les valeurs dans la base de données
Voici mon code avec le code de base de données en commentaire:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("https://example.com/colors"))
colors = doc.css(".colorCircle")
colors_name = doc.css(".zw-m-c-txt")
colors.each do |ele|
hex_code = ele.attr('style').split(";").first.split(":").last
colors_name.each do |name|
color_name = name.text
puts " ++++++ hex_code #{hex_code}"
puts " ++++++ color_name #{color_name}"
# color = colors.find_by(:hex_code => hex_code)
# if color.present?
# color.update_attributes(:name => color_name)
# else
# model.colors.create(:name => color_name, :hex_code => hex_code)
# end
end
end
Voici le détail de la page HTML:
<span class="colorCircle" style="background-color:#EEEFF4;"></span>
<p class="zw-m-c-txt"> <span class="fnt-14"> White Orchid Pearl </span></p>
<span class="colorCircle" style="background-color:#ACABB0;"></span>
<p class="zw-m-c-txt"> <span class="fnt-14"> Modern Steel Metallic </span></p>
<span class="colorCircle" style="background-color:#220909;"></span>
<p class="zw-m-c-txt"> <span class="fnt-14"> Golden Brown Metallic </span></p>
<span class="colorCircle" style="background-color:#43161b;"></span>
<p class="zw-m-c-txt"> <span class="fnt-14"> Carnelian Red Pearl </span></p>
<span class="colorCircle" style="background-color:#E8F1FA;"></span>
<p class="zw-m-c-txt"> <span class="fnt-14"> Alabaster Silver </span></p>
Je ne suis pas en mesure de boucle à travers elle de façon séquentielle et stocker à la base de données. Voici la sortie de courant:
++++++ color_name White Orchid Pearl
++++++ hex_code #EEEFF4
++++++ color_name White Orchid Pearl
++++++ hex_code #ACABB0
++++++ color_name White Orchid Pearl
++++++ hex_code #220909
++++++ color_name White Orchid Pearl
++++++ hex_code #43161b
++++++ color_name White Orchid Pearl
++++++ hex_code #E8F1FA
++++++ color_name Modern Steel Metallic
++++++ hex_code #EEEFF4
++++++ color_name Modern Steel Metallic
++++++ hex_code #ACABB0
++++++ color_name Modern Steel Metallic
++++++ hex_code #220909
++++++ color_name Modern Steel Metallic
++++++ hex_code #43161b
++++++ color_name Modern Steel Metallic
Ceci est le résultat attendu:
hex_code #EEEFF4
color_name White Orchid Pearl
hex_code #ACABB0
color_name Modern Steel Metallic
hex_code #220909
color_name Golden Brown Metallic
Comment puis-je obtenir la sortie attendue et l'enregistrer dans une base de données correspondante hex_code
avec le nom de la couleur?
Vous voulez donc associer chaque nom de couleur à la couleur de fond de l'intervalle? Par exemple. Perle d'orchidée blanche aveC# EEEFF4? – radubogdan
Vous vous rendez compte que vous avez deux boucles imbriquées et que vous exécutez essentiellement chaque nom_color pour chaque couleur. – radubogdan
@radubogdan Oui, vous avez raison, je veux associer chaque nom de couleur à bkg-color depuis span. –