尽管其他许多文章都涉及如何提取数据,但本文还是解释了如何精炼提取的数据,从而仅保留所需的信息。 为此特别 Criteria
在以下所有示例中,使用的方法时,都是从HTML表中提取数据,只要每个数据内容div,span,image等的长度相同,就可以从各种不同的源中提取该数据。
以下是此示例在此表中要抓取的表数据,由四列组成 标题, 作者, 书龄 和 状态.
标题 | 作者 | 书龄 | 状态 |
---|---|---|---|
如何园艺 | John | 5 | 发布时间 |
如何使用相机 | 莎拉 | 0 | 不完整 |
如何使用相机 | 莎拉 | 0 | 不完整 |
天文学变得容易 | 多米尼克 | 1 | 正在审查中 |
如何熨烫 | 保罗 | 1 | 正在审查中 |
如何绘制 | Mike | 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方法,然后从其他列中删除相应的记录。