1893 avis : 5/5 ⭐️⭐️⭐️⭐️⭐️

Wordpress développement

Developpeur wordpress fullstack

scraper en ruby

Créer un scraper automatisé en ruby

Le scraping vous permet d’extraire de la donnée d’un site internet afin de la traiter localement. L’intérêt du scraping est de pouvoir manipuler, traiter, enrichir ses données. Il est possible de scraper tous éléments présents sur le web, numéro de téléphone, mail ou simplement des éléments html. Le scraping est une tâche ingrate et longue. C’est pour cela, qu’une grande majorité des growth hackers font appel à l’automatisation. Nous allons voir ensemble comme nous pouvons scraper de la donnée utilisable de manière automatisé. Nous allons créer un scraper en ruby qui ira scraper les données que nous lui indiquons sur un url précis de manière automatisé.

Pour commencer :

Pour commencer nous allons créer note dossier pour notre scraper. Dans ce dossier nous allons créer un fichier scraper.rb.

Avant de nous lancer dans notre code, nous allons avoir besoin de deux gems ruby pour effectuer notre scraper.

  • Open-uri est une gem permettant de lire et de récupérer le html d’une page
  • Nokogiri va nous permettre de parser de la donnée html précédemment récupérer grâce à Open-uri

En premier lieu nous allons configurer notre fichier scraper en appelant les gems nokogiri et open uri installé sur notre espace de travail.

require 'nokogiri'
require 'open-uri'
nokogiri et open-uri require

Dans un second temps, nous allons avoir besoin de stocker l’url que nous souhaitons scraper dans une variable. Pour notre exemple nous allons scraper cet url ainsi que les pages suivantes : https://annuaire.tech2tech.fr/cat/creation-de-site-internet/page/2/

url = "https://annuaire.tech2tech.fr/cat/creation-de-site-internet/page/2/"

Utiliser Open-uri pour lire la page html

Maintenant que nous avons notre url dans une variable, nous allons pouvoir dans un premier temps, utiliser notre gem Open-uri pour venir lire la page. Pour cela nous ajoutons cette ligne :

open_uri = OpenURI.open_uri(url).read
utiliser open uri

Nous passons en argument notre variable contenant notre url. Il est possible de mettre dans les parenthèses directement l’url souhaité. Mais nous souhaitons rendre notre url dynamique car nous avons plusieurs pages à scraper. La méthode .read permet de venir tout le contenu de la page (en l’occurence le html).

Je vais vous afficher notre ligne de code afin de mieux comprendre les objects que nous manipulons.

résultat open uri terminale de commande

Nous pouvons voir que notre terminale nous renvoie le contenu html. C’est la exactement la même chose que si nous allions sur notre url et que nous affichons le code source de la page.

afficher le code source d'une page

Comparez votre résultat fait manuellement avec votre terminale, vous verrez que le contenu est identique. C’est juste le formatage de sorti des données du terminale qui diffère légèrement.

Utiliser Nokogiri pour parser le HTML de notre page

Maintenant que nous avons récupérer le html de notre page avec open-uri, nous allons pouvoir utiliser Nokogiri pour venir parser notre donnée.

Pour utiliser Nokogiri sur notre résultat nous allons ajouter ces lignes de codes :

doc = Nokogiri::HTML(open_uri)

Commencer notre scraper

Pour automatiser le scraping de toutes les informations contenant l’adresse, ainsi que le service donnée sur notre page html, nous allons devoir effectuer une itération sur notre bloc. Ce qui nous permettra de sortir autant de fois que la valeur est contenue dans notre document.

Pour cela nous allons utiliser la méthode search de ruby sur notre variable contenant notre contenu parser via Nokogiri.

doc.search('METTRE NOTRE SELECTEUR CSS').each do |content|

end
itération ruby

La méthode search prend un argument. Qui sera en l’occurence la class css qui contient le résultat de la donnée que nous souhaitons scraper. Pour identifier la class, nous allons aller sur notre url et inspecter le code source afin d’identifier le selecteur css que nous allons utiliser.

inspecter l'élément

Nous pouvons voir que l’adresse est contenu, dans une div parente ayant la class : item-address dans laquelle nous avons deux span avec le label et sa valeur. Nous allons alors utiliser comme sélecteur css :

.item-address
selecteur css

Tester notre résultat en affichant en terminale :

Nous cherchons à avoir le texte contenu dans la div que nous avons inspecter sur la page. Pour cela nous allons modifier le coeur de notre itération pour ajouter la méthode .text (petit tips, pour cleaner votre donnée ajouter la méthode .text.strip. Cela vous permettra de faire un clean de la donnée ressortie.)

doc.search('.item-address').each do |content|
    p content.text.strip
end
text strip ruby

Testons notre code en lançant ruby nameoffile.rb :

Stocker notre donnée

Si vous en êtes ici, BRAVO ! vous avez déjà réussi à récupérer les données que vous souhaitez. Maintenant nous allons devoir les stocker dans un fichier csv afin de pouvoir le partager, traiter, filtrer nos données facilement.

Dans un premier temps, nous allons le stocker dans un array (tableau en français) qui par la suite va venir incrémenter notre csv.

Pour cela nous allons stocker un array vide dans une variable, puis venir l’incrémenter dans notre itération :

array_address = []

doc.search('.item-address').each do |content|
    array_address << content.text.strip
end
stocker donnée scraper array
L’incrémentation en ruby s’effectue par les << 😉

Affichons notre résultat :

Stocker notre array dans un tableur csv

Maintenant que nous stockons nos données dans notre array, nous allons vouloir persister cette donnée dans un csv afin de pouvoir récupérer et surtout persister convenablement nos données.

Pour cela nous allons devoir utiliser le CSV. En ruby lorsque vous manipulez un csv, vous devez :

require 'csv'

C’est le même principe que pour nokogiri et open-uri :

require csv ruby

Codons maintenant la méthode de persistance de notre csv :

CSV.open ("scraper_fou.csv", "wb") do |csv|
    csv << array_address
end
csv sauvegarde

Nous appelons la class CSV avec la méthode open qui prend deux arguments : le filepath de note csv, ainsi que la méthode d’écriture. Pour notre exemple nous utiliser wb (write binary). Vous pouvez utiliser par exemple ab qui différente. Pour en savoir plus voici la doc sur les csv en ruby : DOCUMENTATION

Testons notre programme :

Nous allons lancer notre programme et voir ce qu’il se passe. Avant de lancer le programme voici mon vscode :

vscode scraper
ruby name.rb # pour lancer votre programme

Résultat après avoir lancer notre programme :

génération d'un csv

Nous pouvons constater que notre programme nous a bien créé notre CSV !! Allons voir immédiatement le résultat du stockage :

résultat csv

Parfait !

Optionnel : Complexifier notre scraper pour aller de page en page

Maintenant que nous voyons que notre scraper arrive à scraper la donnée demandée. Nous allons vouloir renouveler l’opération sur autant de page que le site en contient.

Pour cela nous allons définir un compteur à 0, devoir ajouter un boucle afin de réitérer l’opération autant de fois que nous l’avons décider.

Dans un premier temps, nous voyons que la structure de notre url est formée de cette façon : https://annuaire.tech2tech.fr/cat/creation-de-site-internet/page/2/

Nous allons pouvoir interpoler notre compteur dans l’url pour modifier la valeur de la page à chaque fois que notre scraper à récupérer les données souhaités sur l’url.

Voici le résultat final :

require 'nokogiri'
require 'open-uri'
require 'csv'


compteur = 2
array_address = []

while compteur != 4
    url = "https://annuaire.tech2tech.fr/cat/creation-de-site-internet/page/#{compteur}/"
    open_uri = OpenURI.open_uri(url).read
    doc = Nokogiri::HTML(open_uri)
    doc.search('.item-address').each do |content|
        array_address << content.text.strip
    end
    p compteur
    compteur += 1
end
p compteur

CSV.open("scraper_fou.csv", "wb") do |csv|
    csv << array_address
end
scraper terminée ruby

Nous avons réussi à scraper la page 2 et 3 du site que nous voulons !

Lien repo d’un scraper réalisé par AS WEB : https://github.com/alexisjps/scraper_fou

Articles dans la thématique Wordpress :
enregistrement dns
Comprendre les DNS / Gérer

Le contenu ruby on rails est dédié à la communauté du Wagon (élèves et professeurs). Pour vous inscrire au bootcamp pour devenir web développeur c'est ici. Les enregistrements DNS (Domain Name System) sont des entrées qui permettent de lier les noms de domaines aux adresses IP correspondantes. Ils jouent un.

Lire l'article
Gérer son nom de domaine sur Heroku

Le contenu ruby on rails est dédié à la communauté du Wagon (élèves et professeurs). Pour vous inscrire au bootcamp pour devenir web développeur c'est ici. Un nom de domaine est similaire à une adresse postale. Il est important pour votre application rails qu’elle soit accessible sur le nom de.

Lire l'article
scraper en ruby
Créer un scraper automatisé en ruby

Le contenu ruby on rails est dédié à la communauté du Wagon (élèves et professeurs). Pour vous inscrire au bootcamp pour devenir web développeur c'est ici. Le scraping vous permet d’extraire de la donnée d’un site internet afin de la traiter localement. L’intérêt du scraping est de pouvoir manipuler, traiter,.

Lire l'article