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.
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.
título | autor | idade do livro | estado |
---|---|---|---|
Como Jardinar | banheiro | 5 | Publicado |
Como usar uma câmera | Sarah | 0 | Incompleto |
Como usar uma câmera | Sarah | 0 | Incompleto |
Astronomia facilitada | Dominic | 1 | Sob revisão |
Como passar | Paul | 1 | Sob revisão |
Como desenhar | microfone | 3 | Publicado |
Como usar um PC | Rachel | 4 | Publicado |
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.
No exemplo, a coluna status foi restrita a incluir apenas Publicado, 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.
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.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.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.
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.