Si bien muchos de los otros artículos tratan sobre cómo extraer datos, este artículo explica cómo se pueden refinar los datos extraídos para que solo quede la información deseada. Para hacer esto el especial Criteria
los métodos se utilizan mientras que en todos los ejemplos siguientes los datos se extraen de una tabla HTML, estos datos se pueden extraer de una variedad de fuentes diferentes siempre que cada fuente de contenido de datos divs, spans, images, etc. sea de la misma longitud.
A continuación se muestran los datos de la tabla que se raspan en este ejemplo. Esta tabla consta de cuatro columnas. título, autor, edad del libro y estado.
título | autor | edad del libro | estado |
---|---|---|---|
Cómo cultivar un huerto | Juan | 5 | Publicado |
Cómo usar una cámara | Sara | 0 | Incompleto |
Cómo usar una cámara | Sara | 0 | Incompleto |
Astronomía hecha fácil | Dominic | 1 | Bajo revisión |
Cómo planchar | Paul | 1 | Bajo revisión |
Como dibujar | Mike | 3 | Publicado |
Cómo usar una 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"}}});
A menudo, los datos raspados deben ser refinados para que solo tengan la información que requieren. Aquí es donde el Criteria
Se utilizan funciones. Por ejemplo, si solo se requieren libros publicados, deberá restringir la columna de estado anterior a publicada y luego aplicar esos cambios a los datos de la otra columna como se muestra a continuación.
Criteria.create(); statuses = Criteria.equals(statuses, "Published"); titles = Criteria.apply(titles); authors = Criteria.apply(authors); ages = Criteria.apply(ages);
Cuando usas Criteria
Los métodos para reducir los datos deben aplicarse a todos los cambios en una sola columna a la vez, antes de apply
El método se utiliza en cualquier otra columna que tenga que eliminar los registros correspondientes. Una vez completado el Criteria.create()
Se debe llamar al método antes de establecer los criterios para otras columnas. Es por esta razón que es una buena práctica llamar al Criteria.create()
antes de cualquier otro método criterio.
En el ejemplo, la columna de estado se ha restringido para incluir solo Publicado, luego usando el Criteria.apply
método los registros correspondientes en las otras tres columnas también se han eliminado para mantener todas las columnas consistentes. Recuerde que el método de aplicación solo es útil si las diferentes columnas contienen el mismo número de registros.
Los criterios también se pueden combinar para restringir los datos de varias maneras. El siguiente ejemplo restringe la columna de edad del libro a los libros de más de uno pero menos de cinco años utilizando el Criteria.lessThan()
y 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);
A veces hay datos duplicados que deben eliminarse, para eliminar esta información puede usar el Criteria.unique
método.
Criteria.create(); titles = Criteria.unique(titles); authors = Criteria.apply(authors); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
Ahora se eliminarán las filas duplicadas basadas en la columna de título. El siguiente método es el Criteria.remove
método. Esto elimina elementos de la columna si esos valores de columna se encuentran en el parámetro de matriz.
var authorsToRemove = ["Mike","Rachel"]; Criteria.create(); authors = Criteria.remove(authors, authorsToRemove); titles = Criteria.apply(titles); ages = Criteria.apply(ages); statuses = Criteria.apply(statuses);
Aquí, todos los registros que sean iguales a Mike y Rachel en la columna de autores se eliminan, el método de aplicación luego elimina los registros correspondientes de las otras columnas.