尽管其他许多文章都涉及如何提取数据,但本文还是解释了如何精炼提取的数据,从而仅保留所需的信息。 为此特别 Criteria 在以下所有示例中,使用的方法时,都是从HTML表中提取数据,只要每个数据内容div,span,image等的长度相同,就可以从各种不同的源中提取该数据。
Criteria
以下是此示例在此表中要抓取的表数据,由四列组成 标题, 作者, 书龄 和 状态.
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() 在其他任何标准方法之前。
apply
Criteria.create()
在示例中,状态列被限制为仅包含 发布时间,然后使用 Criteria.apply 方法还删除了其他三列中的相应记录,以使所有列保持一致。 请记住,apply方法仅在不同的列包含相同数量的记录时才有用。
Criteria.apply
Critieria也可以组合在一起以多种方式限制数据。 以下示例通过使用,将“图书年龄”列限制为超过一岁但少于五年的图书。 Criteria.lessThan() 和 Criteria.greaterThan() 方法。
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.unique
Criteria.create(); titles = Criteria.unique(titles); authors = Criteria.apply(authors); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
现在,将删除基于标题列的所有重复行。 下一个方法是 Criteria.remove 方法。 如果在array参数中找到了这些列值,则这将从列中删除项目。
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的记录,然后应用apply方法,然后从其他列中删除相应的记录。