捕獲和轉換Web的工具

完善抓取的數據

儘管其他許多文章都涉及如何提取數據,但本文還是解釋瞭如何精煉提取的數據,從而僅保留所需的信息。 為此要特別 Criteria 在以下所有示例中,使用的方法時,都是從HTML表中提取數據,只要每個數據內容div,span,image等的長度相同,就可以從各種不同的源中提取該數據。

表格示例:圖書清單

以下是此示例在此表中要抓取的表數據,由四列組成 標題, 作者, 書齡狀態.

標題 作者 書齡 狀態
如何園藝 約翰福音 5 發布時間
如何使用相機 莎拉 0 殘缺
如何使用相機 莎拉 0 殘缺
天文學變得容易 多米尼克 1 正在審查中
如何熨燙 藍*棉花糖 1 正在審查中
如何繪製 麥克風 3 發布時間
如何使用電腦 雷切爾 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 減少數據的所有更改的方法必須一次應用於一列 apply 該方法用於必須刪除相應記錄的任何其他列。 一旦完成 Criteria.create() 必須在為其他列設置條件之前調用方法。 正是由於這個原因,最佳做法是將 Criteria.create() 在其他任何標準方法之前。

在示例中,狀態列被限制為僅包含 發布時間,然後使用 Criteria.apply 方法還刪除了其他三列中的相應記錄,以使所有列保持一致。 請記住,apply方法僅在不同的列包含相同數量的記錄時才有用。

Critieria也可以組合在一起以多種方式限制數據。 以下示例通過使用,將“圖書年齡”列限制為超過一歲但少於五年的圖書。 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 方法。 如果在array參數中找到了這些列值,則這將從列中刪除項目。

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的記錄,然後應用apply方法,然後從其他列中刪除相應的記錄。