Scraping des pages Web pour enrichissement avant Machine Learning

Fichier de données sur l'univers de concurrence de Networking Morbihan

Cet article fait suite aux 4 articles précédents :

Dans cet article nous allons créer de nouvelles variables explicatives à partir du contenu des pages Web positionnées, pour pouvoir les utiliser dans un nouvel essai de Machine Learning que nous verrons dans un article suivant.

Pour ce faire nous allons créer un scraper de pages Web directement dans notre code Python.

Nouvelles variables explicatives

Une fois la récupération du contenu des pages effectuées nous allons créer de nouvelles variables que nous allons ajouter à celles que nous avions déjà. La liste des variables au final sera :

  • isHttps : le site est -il en https ?
  • level : « pseudo niveau » de la
    page dans l’arborescence du site
  • lenWebsite : taille de l’url du site en caractères
  • lenTokensWebSite : taille de l’url du site
    en nombre de mots
  • lenTokensQueryInWebSiteFrequency :
    fréquence des mots de la requête dans le nom du site.
  • sumTFIDFPathFrequency : somme des TF-IDF
    pour les mots de WebSite en fonction de la taille en mots (indicateur
    d’originalité du contenu).
  • lenPath : taille du chemin en caractères
  • lenTokensPath : taille du chemin en nombre
    de mots
  • lenTokensQueryInPathFrequency : fréquence
    des mots de la requête dans le chemin.
  • sumTFIDFPathFrequency : idem que pour
    WebSite.
  • lenTitle : taille du titre en caractères
  • lenTokensTitle : taille du titre en mots
  • lenTokensQueryInTitleFrequency : fréquence
    des mots de la requête dans le titre
  • sumTFIDFTitleFrequency : somme des TF-IDF
    pour les mots du titre en fonction de la taille en mots (indicateur
    d’originalité du contenu).
  • …  on répète
    les 4 variables précédentes pour les balises suivantes : description, H1,
    H2, H3, H4, H5, B, EM, strong et aussi pour l’ensemble du contenu de la page
    body
  • elapsedTime : temps de chargement de la
    page
  • nbrInternalLinks : nombre de liens internes
    sur la page
  • nbrExternalLinks : nombre de liens externes
    sur la page.

De quoi aurons nous besoin ?

Python Anaconda

Comme précédemment, téléchargez la version de Python Anaconda qui vous convient selon votre ordinateur.

Jeu de données

Nous partons du jeu de données dfQPPS1-MAI.json créé lors de la phase précédente que vous pouvez récupérer au format .zip sur notre Github.

Code Source

Vous pouvez soit copier/coller les morceaux de codes ci-dessous, soit récupérer le code source en entier sur notre Github à l’adresse : https://github.com/Anakeyn/ScrapWebPagesForMachineLearning.

Pour des problèmes de manque de mémoire vive, vous remarquerez que nous sauvegardons régulièrement des données en fichiers .json et supprimons les jeux de données correspondants en mémoire pour pouvoir effectuer des traitements.

Récupération des bibliothèques utiles et définition de la fonction TF*IDF

Pour plus de détail sur la notion de TF*IDF, reportez vous à notre article Modèle Interne : test de classification de pages via le Machine Learning pour un seul site .

Récupération du jeu de données et sélection des pages à scraper.

On ne va garder que les pages html. Par ailleurs, on effectue qu’une seule fois la lecture de chaque page.

Scraping des pages

Cette partie peut durer un certain temps en fonction de votre nombre de pages. Pour nous 9709 pages.

Reconstruction du jeu de données principal

On va récupérer les données de scraping dans le jeu de données principal. on va aussi enlever les pages en erreur qui ne nous intéressent pas :

Préparation des nouvelles variables

Les nouvelles variables seront créées à partir du contenu que l’on vient de scraper. On a besoin aussi de quelques fonctions pour le nettoyage.

Récupération des données pour les nouvelles variables

On récupère les données en bouclant sur tous les contenus HTML. La plupart des variables que l’on souhaite sont créées dans cette phase.

Traitements non effectués dans la boucle

Ici nous enrichissons avec les variables contenant les termes (tokensxx) et les sommes des TF*IDF (sumTFIDF). Attention le calcul de TF*IDF pour Body est très gourmand en mémoire. Il vous faut au moins 16 GO de Ram sur votre machine.

Fréquence de SumTFIDF

Finalement on va calculer sumTFIDF vs la longueur de l’objet recherché pour avoir un fréquence de sumTFIDF. Cela permet d’avoir un indicateur de « l’originalité » de l’objet. : Plus c’est grand plus c’est « original » .

Nous récupérerons ces données dans notre prochain article pour tester à nouveau des algorithmes de Machine Learning.

Fichier de données sur l'univers de concurrence de Networking Morbihan
Fichier de données sur l’univers de concurrence de Networking Morbihan

A bientôt,

Pierre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.