• Accueil
  • Blog SEO
  • Contact

Récupérer les paramètres d'une liste d'URLs avec Ruby

Scripts SEO

Blog SEO / Scripts SEO

Publié le 7 Jun 2018

Manipuler de longues listes de mots-clés ou de longues listes d'URL fait partie du quotidien d'un référenceur. Et quand on a des traitements récurrents à faire sur ces fichiers, on cherche souvent à automatiser. Un exemple ici avec l'extraction des paramètres depuis une liste d'URLs.

Vous avez une liste d'URLs issue d'un crawl, d'une analyse de logs ou d'un export de backlinks et vous cherchez à identifier rapidement quels sont les différents paramètres d'URL présents ? Voici comment faire.

L'intérêt SEO

Les applications sont nombreuses : identifier des paramètres générant du duplicate d'URL, trier les paramètres à autoriser/interdire au crawl ou à l'indexation, vérifier qu'il n'y a pas de problèmes de casse avec certains paramètres en minuscules et d'autres en majuscule, etc.

La méthode en Ruby

Voilà un petit script pour automatiser le processus avec Ruby.

Récupérer les paramètres

Pour récupérer les différents paramètres à partir de la liste, on va boucler sur cette liste et découper l'URL chaque fois qu'on trouve un “?” ou un “&”. Chaque valeur sera stockée dans un array. On va ensuite retirer de notre array le 1er élement (l'URL sans les paramètres) via la méthode drop. Puis supprimer de l'array les éléments vides, et, pour chaque valeur, supprimer tout ce qui se trouve derrière le “=”. On va enfin mettre à plat notre array avec flatten.

#!/usr/bin/env ruby

def get_params_from(list)
  list.map do |url|
    url.split(/\?|\&/).
        drop(1).
        reject(&:empty?).
        map { |param| param.sub!(/=.*/,"") }
  end.flatten
end

Compter le nombre d'occurrences de chaque paramètre

Une fois qu'on a notre liste de paramètres, on va compter le nombre de fois où chaque paramètre apparait. On va utiliser pour cela la méthode inject qui permet d'instancier un mémo (ici un hash) qu'on remplit lors de notre loop avec un simple comptage.

def count_params_from(list)
  list.inject(Hash.new(0)) { |h, i| h[i] += 1; h }
end

Stocker le tout dans un CSV

Il ne reste plus qu'à exporter le tout dans un CSV, en triant le fichier dans l'ordre décroissant du nombre d'occurences de chaque paramètre.

def export_to_csv(data)
  CSV.open("params.csv", "w") do |file|
    data.sort_by { |k, v| v }.reverse.each do |k, v|
      file << [k,v]
    end
  end
end

On aura donc en sortie un fichier CSV avec deux colonnes, la première contenant le paramètre et la deuxième le nombre d'occurences.

Le code complet

Votre liste d'URLs de départ doit se trouver dans un fichier “urls.csv”. Amusez-vous bien :)

#!/usr/bin/env ruby

require 'CSV'

def get_params_from(list)
  list.map do |url|
    url.split(/\?|\&/).
        drop(1).
        reject(&:empty?).
        map { |param| param.sub!(/=.*/,"") }
  end.flatten
end

def count_params_from(list)
  list.inject(Hash.new(0)) { |h, i| h[i] += 1; h }
end

def export_to_csv(data)
  CSV.open("params.csv", "w") do |file|
    data.sort_by { |k, v| v }.reverse.each do |k, v|
      file << [k,v]
    end
  end
end

list = CSV.read("./urls.csv").flatten
params = get_params_from(list)
params_hash_count = count_params_from(params)
export_to_csv(params_hash_count)
comments powered by Disqus
  • Marquette-lez-Lille
  • 06 12 71 82 78
  • contact@antoine-brisset.com
© 2019 - Antoine Brisset