Tools zum Erfassen und Konvertieren des Webs

Verfeinerung von verkratzten Daten

Während sich viele der anderen Artikel mit dem Extrahieren von Daten befassen, wird in diesem Artikel erläutert, wie die extrahierten Daten so verfeinert werden können, dass nur die gewünschten Informationen verbleiben. Dazu das Besondere Criteria Es werden Methoden verwendet, während in allen folgenden Beispielen die Daten aus einer HTML-Tabelle extrahiert werden. Diese Daten können aus verschiedenen Quellen extrahiert werden, sofern jede Quelle von Dateninhalten divs, span, images usw. dieselbe Länge hat.

Beispieltabelle: Buchliste

Nachfolgend sind die Tabellendaten aufgeführt, die in diesem Beispiel in dieser Tabelle erfasst werden. Diese Tabelle besteht aus vier Spalten Titel, Autor, Buchalter und Status.

Titel Autor Buchalter Status
Wie man im Garten arbeitet John 5 Veröffentlicht
Wie benutzt man eine Kamera? sarah 0 Unvollständig
Wie benutzt man eine Kamera? sarah 0 Unvollständig
Astronomie leicht gemacht Dominic 1 Unter Überprüfung
Wie man bügelt Paul 1 Unter Überprüfung
Wie man zeichnet Mike 3 Veröffentlicht
Wie man einen PC benutzt Rachel 4 Veröffentlicht
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"}}});

Häufig müssen gescrapte Daten so verfeinert werden, dass sie nur die Informationen enthalten, die sie benötigen. Dies ist, wo die Criteria Funktionen verwendet werden. Wenn beispielsweise nur veröffentlichte Bücher erforderlich sind, müssen Sie die Statusspalte oben auf veröffentlicht beschränken und diese Änderungen dann auf die anderen Spaltendaten anwenden, wie unten gezeigt.

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

Beim Benutzen Criteria Methoden zum Reduzieren der Daten Alle Änderungen müssen jeweils auf eine einzelne Spalte angewendet werden, bevor die apply Methode wird für alle anderen Spalten verwendet, für die die entsprechenden Datensätze entfernt werden müssen. Sobald Sie fertig sind die Criteria.create() Methode muss aufgerufen werden, bevor Kriterien für andere Spalten festgelegt werden. Aus diesem Grund ist es empfehlenswert, die anzurufen Criteria.create() vor allen anderen Kriterien Methoden.

In diesem Beispiel wurde die Spalte "Status" auf "Nur einschließen" beschränkt Veröffentlicht, dann mit dem Criteria.apply Die entsprechenden Datensätze in den drei anderen Spalten wurden ebenfalls entfernt, um die Konsistenz aller Spalten zu gewährleisten. Beachten Sie, dass die Methode apply nur sinnvoll ist, wenn die verschiedenen Spalten dieselbe Anzahl von Datensätzen enthalten.

Kriterien können auch kombiniert werden, um die Daten auf mehrere Arten einzuschränken. Das folgende Beispiel schränkt die Spalte "Buchalter" auf Bücher ein, die älter als eins, aber jünger als fünf Jahre sind Criteria.lessThan() und Criteria.greaterThan() Methoden.

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

Manchmal müssen doppelte Daten entfernt werden. Um diese Informationen zu entfernen, können Sie das verwenden Criteria.unique Methode.

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

Jetzt werden alle doppelten Zeilen basierend auf der Titelspalte entfernt. Die nächste Methode ist die Criteria.remove Methode. Dadurch werden Elemente aus der Spalte entfernt, wenn diese Spaltenwerte im Array-Parameter gefunden werden.

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

Hier werden alle Datensätze entfernt, die Mike und Rachel in der Autorspalte entsprechen. Die Methode apply entfernt dann die entsprechenden Datensätze aus den anderen Spalten.