Outils pour capturer et convertir le Web

Raffinage des données grattées

Alors que de nombreux autres articles traitent de la façon d'extraire des données, cet article explique comment affiner les données extraites pour ne conserver que les informations souhaitées. Pour ce faire la spéciale Criteria les méthodes sont utilisées alors que dans tous les exemples suivants, les données sont extraites d'un tableau HTML, ces données peuvent être extraites de différentes sources à condition que chaque source de données divs, span, images, etc. de contenu contienne la même longueur.

Exemple de tableau: liste de livres

Ci-dessous, les données de la table en cours de grattage dans cet exemple. Cette table est composée de quatre colonnes. titre, auteur, âge du livre et statuts.

titre auteur âge du livre statuts
Comment jardiner John 5 Publié le
Comment utiliser une caméra Sarah 0 Couverture
Comment utiliser une caméra Sarah 0 Couverture
L'astronomie rendue facile Dominic 1 À l'étude
Comment repasser paul 1 À l'étude
Comment dessiner Michel 3 Publié le
Comment utiliser un PC Rachel 4 Publié le
var titles = Page.getTagValues({"position":1,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var authors = Page.getTagValues({"position":2,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var ages = Page.getTagValues({"position":3,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var statuses = Page.getTagValues({"position":4,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});

Les données récupérées doivent souvent être raffinées pour ne disposer que des informations nécessaires. C'est là que le Criteria les fonctions sont utilisées. Par exemple, si seuls des livres publiés sont requis, vous devez limiter la colonne des statuts ci-dessus à publié, puis appliquer ces modifications aux autres données de colonne, comme indiqué ci-dessous.

Criteria.create();
statuses = Criteria.equals(statuses, "Published");
titles = Criteria.apply(titles);
authors = Criteria.apply(authors);
ages = Criteria.apply(ages);

Lors de l'utilisation Criteria méthodes de réduction des données, toutes les modifications doivent être appliquées à une seule colonne à la fois, avant la apply La méthode est utilisée sur toutes les autres colonnes pour lesquelles les enregistrements correspondants doivent être supprimés. Une fois terminé le Criteria.create() La méthode doit être appelée avant que les critères ne soient définis pour d'autres colonnes. C’est pour cette raison que la meilleure pratique consiste à appeler le Criteria.create() avant toute autre méthode de critère.

Dans l'exemple, la colonne des statuts a été restreinte pour inclure uniquement Publié le, puis en utilisant le Criteria.apply méthode, les enregistrements correspondants dans les trois autres colonnes ont également été supprimés pour conserver la cohérence de toutes les colonnes. N'oubliez pas que la méthode apply n'est utile que si les différentes colonnes contiennent le même nombre d'enregistrements.

Les critiques peuvent également être combinées pour limiter les données de plusieurs manières. L’exemple ci-dessous limite la colonne d’âge du livre aux livres de plus d’un an mais de moins de cinq ans en utilisant le code suivant. Criteria.lessThan() et Criteria.greaterThan() méthodes.

Criteria.create();
ages = Criteria.greaterThan(ages, 1);
ages = Criteria.lessThan(ages, 5);
titles = Criteria.apply(titles);
authors = Criteria.apply(authors);
statuses = Criteria.apply(statuses);

Il est parfois nécessaire de supprimer les données en double. Pour supprimer ces informations, vous pouvez utiliser le Criteria.unique méthode.

Criteria.create();
titles = Criteria.unique(titles);
authors = Criteria.apply(authors);
ages = Criteria.apply(ages);
statuses = Criteria.apply(statuses);

Désormais, toutes les lignes en double basées sur la colonne de titre seront supprimées. La méthode suivante est la Criteria.remove méthode. Cela supprime les éléments de la colonne si ces valeurs de colonne sont trouvées dans le paramètre array.

var authorsToRemove = ["Mike","Rachel"];
Criteria.create();
authors = Criteria.remove(authors, authorsToRemove);
titles = Criteria.apply(titles);
ages = Criteria.apply(ages);
statuses = Criteria.apply(statuses);

Ici, tous les enregistrements égaux à Mike et Rachel dans la colonne authors sont supprimés de la méthode apply, puis suppriment les enregistrements correspondants des autres colonnes.