Embora muitos dos outros artigos tratem de como extrair dados, este artigo explica como os dados extraídos podem ser refinados para que apenas as informações desejadas permaneçam. Para fazer isso, o especial Criteria métodos são usados, enquanto em todos os exemplos a seguir os dados são extraídos de uma tabela HTML, esses dados podem ser extraídos de uma variedade de fontes diferentes, desde que cada fonte de conteúdo de dados divs, spans, imagens etc. tenha o mesmo comprimento.
Criteria
Abaixo estão os dados da tabela que estão sendo raspados neste exemplo, esta tabela consiste em quatro colunas título, autor, idade do livro e estado.
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"}}});
Os dados raspados geralmente precisam ser refinados para que eles tenham apenas as informações necessárias. É aqui que o Criteria funções são usadas. Por exemplo, se apenas livros publicados forem necessários, você deverá restringir a coluna de status acima à publicação e, em seguida, aplicar essas alterações aos outros dados da coluna, como mostrado abaixo.
Criteria.create(); statuses = Criteria.equals(statuses, "Published"); titles = Criteria.apply(titles); authors = Criteria.apply(authors); ages = Criteria.apply(ages);
Ao usar Criteria métodos para reduzir os dados, todas as alterações devem ser aplicadas em uma única coluna por vez, antes do apply O método é usado em qualquer outra coluna que precise remover os registros correspondentes. Depois de concluir o Criteria.create() O método deve ser chamado antes que os critérios sejam definidos para outras colunas. É por esse motivo que é uma boa prática chamar o Criteria.create() antes de qualquer outro método de critério.
apply
Criteria.create()
No exemplo, a coluna status foi restrita a incluir apenas Publicados, em seguida, usando o Criteria.apply método, os registros correspondentes nas outras três colunas também foram removidos para manter todas as colunas consistentes. Lembre-se de que o método apply é útil apenas se as diferentes colunas contiverem o mesmo número de registros.
Criteria.apply
As críticas também podem ser combinadas para restringir os dados de várias maneiras. O exemplo abaixo restringe a coluna da idade do livro a livros com mais de um ano e menos de cinco anos usando o método Criteria.lessThan() e Criteria.greaterThan() métodos.
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);
Às vezes, há dados duplicados que precisam ser removidos. Para remover essas informações, você pode usar o Criteria.unique método.
Criteria.unique
Criteria.create(); titles = Criteria.unique(titles); authors = Criteria.apply(authors); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
Agora, qualquer linha duplicada com base na coluna de título será removida. O próximo método é o Criteria.remove método. Isso remove itens da coluna se esses valores da coluna forem encontrados no parâmetro 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);
Aqui, todos os registros iguais a Mike e Rachel na coluna dos autores são removidos, o método apply e os registros correspondentes das outras colunas.