Tools om het web vast te leggen en te converteren

Geschraapte gegevens verfijnen

Hoewel veel van de andere artikelen gaan over het extraheren van gegevens, legt dit artikel uit hoe de geëxtraheerde gegevens kunnen worden verfijnd, zodat alleen de gewenste informatie overblijft. Om dit de speciale te doen Criteria methoden worden gebruikt, terwijl in alle volgende voorbeelden de gegevens uit een HTML-tabel worden geëxtraheerd, deze gegevens kunnen uit verschillende bronnen worden geëxtraheerd zolang elke bron van gegevensinhoud divs, reeksen, afbeeldingen enz. van dezelfde lengte is.

Voorbeeldtabel: boekenlijst

Hieronder staan ​​de tabelgegevens die in dit voorbeeld worden geschrapt. Deze tabel bestaat uit vier kolommen titel, auteur, boek leeftijd en toestand.

titel auteur boek leeftijd toestand
Hoe te tuinieren John 5 gepubliceerd
Hoe een camera te gebruiken Sarah 0 Onvolledig
Hoe een camera te gebruiken Sarah 0 Onvolledig
Astronomie gemakkelijk gemaakt Dominic 1 Wordt beoordeeld
Hoe te strijken Paul 1 Wordt beoordeeld
Hoe te tekenen Mike 3 gepubliceerd
Hoe een pc te gebruiken Rachel 4 gepubliceerd
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"}}});

Vaak moeten geschraapte gegevens worden verfijnd zodat ze alleen de informatie hebben die ze nodig hebben. Dit is waar de Criteria functies worden gebruikt. Als bijvoorbeeld alleen gepubliceerde boeken vereist zijn, moet u de kolom met statussen hierboven beperken tot gepubliceerd en deze wijzigingen vervolgens toepassen op de andere kolomgegevens zoals hieronder weergegeven.

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

Tijdens gebruik Criteria methoden om de gegevens te verminderen, moeten alle wijzigingen op één kolom tegelijk worden toegepast, vóór de apply methode wordt gebruikt voor alle andere kolommen waarvoor de bijbehorende records moeten worden verwijderd. Voltooi de Criteria.create() methode moet worden aangeroepen voordat criteria voor andere kolommen worden ingesteld. Het is om deze reden dat het beste is om de Criteria.create() vóór alle andere criteria methoden.

In het voorbeeld is de kolom met statussen beperkt tot alleen opnemen gepubliceerden gebruik vervolgens de Criteria.apply methode zijn de overeenkomstige records in de drie andere kolommen ook verwijderd om alle kolommen consistent te houden. Houd er rekening mee dat de methode Toepassen alleen nuttig is als de verschillende kolommen hetzelfde aantal records bevatten.

Critieria kan ook worden gecombineerd om de gegevens op meerdere manieren te beperken. In het onderstaande voorbeeld is de kolom voor de leeftijd van boeken beperkt tot boeken die ouder zijn dan één maar minder dan vijf jaar oud door de Criteria.lessThan() en Criteria.greaterThan() werkwijzen.

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

Soms zijn er dubbele gegevens die moeten worden verwijderd, om deze informatie te verwijderen kunt u de Criteria.unique methode.

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

Nu worden dubbele rijen op basis van de titelkolom verwijderd. De volgende methode is de Criteria.remove methode. Hiermee worden items uit de kolom verwijderd als die kolomwaarden worden gevonden in de array-parameter.

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

Hier worden alle records die gelijk zijn aan Mike en Rachel in de auteurskolom verwijderd. Vervolgens worden de overeenkomstige records uit de andere kolommen verwijderd.