他の記事の多くはデータの抽出方法を扱っていますが、この記事では、抽出されたデータを改良して、必要な情報のみを残す方法について説明しています。 これを行うには特別な Criteria
メソッドは使用されますが、以下のすべての例では、データはHTMLテーブルから抽出されます。このデータは、データコンテンツdiv、スパン、画像などの各ソースが同じ長さである限り、さまざまなソースから抽出できます。
以下は、この表の4つの列で構成されるこの例でスクレイピングされる表データです。 タイトル, 著者, 本の時代 や status.
タイトル | 著者 | 本の時代 | status |
---|---|---|---|
庭の作り方 | John Redfern | 5 | 公開済み |
カメラの使用方法 | サラ | 0 | 不完全 |
カメラの使用方法 | サラ | 0 | 不完全 |
天文学が簡単に | ドミニク | 1 | レビュー中 |
アイロンをかける方法 | Paul Cairns | 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(); authors = Criteria.remove(authors, authorsToRemove); titles = Criteria.apply(titles); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
ここで、authors列のMikeとRachelに等しいすべてのレコードが適用メソッドによって削除され、その後、他の列から対応するレコードが削除されます。