Ferramentas para capturar e converter a Web

Refinando dados raspados

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.

Tabela de exemplo: lista de livros

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 Publicados
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 Publicados
Como usar um PC Rachel 4 Publicados
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 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.

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.