Webをキャプチャして変換するツール

スクレイピングされたデータの精製

他の記事の多くはデータの抽出方法を扱っていますが、この記事では、抽出されたデータを改良して、必要な情報のみを残す方法について説明しています。 これを行うには特別な Criteria メソッドは使用されますが、以下のすべての例では、データはHTMLテーブルから抽出されます。このデータは、データコンテンツdiv、スパン、画像などの各ソースが同じ長さである限り、さまざまなソースから抽出できます。

例の表:書籍リスト

以下は、この表の4つの列で構成されるこの例でスクレイピングされる表データです。 タイトル, 著者, 本の時代status.

タイトル 著者 本の時代 status
庭の作り方 ジョン 5 公開済み
カメラの使用方法 サラ 0 不完全
カメラの使用方法 サラ 0 不完全
天文学が簡単に ドミニク 1 レビュー中
アイロンをかける方法 ポール 1 レビュー中
描き方 マイク 3 公開済み
PCの使い方 レイチェル 4 公開済み
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"}}});

多くの場合、必要な情報のみが含まれるように、スクレイピングされたデータを改良する必要があります。 ここが Criteria 関数が使用されます。 たとえば、公開された書籍のみが必要な場合、上記のステータス列を公開に制限し、次に示すように、それらの変更を他の列データに適用する必要があります。

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

使用時 Criteria データを削減する方法は、すべての変更を一度に1つの列に適用する必要があります。 apply メソッドは、対応するレコードを削除する必要がある他の列で使用されます。 完了したら Criteria.create() 別の列に基準を設定する前に、メソッドを呼び出す必要があります。 この理由により、 Criteria.create() 他の基準メソッドの前。

この例では、ステータス列は次のもののみに制限されています 公開済み、次に Criteria.apply 他の3つの列の対応するレコードも削除され、すべての列の一貫性が保たれます。 applyメソッドは、異なる列に同じ数のレコードが含まれている場合にのみ役立つことに注意してください。

Critieriaを組み合わせて、複数の方法でデータを制限することもできます。 次の例では、次を使用して、書籍の年齢列を1歳以上5歳未満の書籍に制限しています。 Criteria.lessThan()Criteria.greaterThan() 方法。

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

削除する必要がある重複データがある場合があります。この情報を削除するには、 Criteria.unique 方法。

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

これで、タイトル列に基づいて重複する行が削除されます。 次の方法は Criteria.remove 方法。 これらの列の値が配列パラメーターで見つかった場合、列から項目が削除されます。

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

ここで、authors列のMikeとRachelに等しいすべてのレコードが適用メソッドによって削除され、その後、他の列から対応するレコードが削除されます。