儘管其他許多文章都涉及如何提取數據,但本文還是解釋瞭如何精煉提取的數據,從而僅保留所需的信息。 為此要特別 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(); authors = Criteria.remove(authors, authorsToRemove); titles = Criteria.apply(titles); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
在這裡,刪除了authors列中所有等於Mike和Rachel的記錄,然後應用apply方法,然後從其他列中刪除相應的記錄。