Skip to content

mrgrassho/dpaas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Análisis de los sitios seleccionados

A continuación listamos los sitios seleccionados:

TO-DO:

Descripción de Features

Talles

Los talles se consideran que estan mostrados de forma normal, si se encuentran señalados en la descripción. Siguiendo la siguiente expresión regular:

brand = "(?P<brand>huggies|pampers|babysec)"
size = "\s(pr|rn|p|m|g|xg|xxg)*\s*(\\\/|\-)*\s*(?P<size>pr|rn|p|m|g|xg|xxg)"
units_label_1 = "x\s*(?P<units>[0-9]+)"
units_label2 = "\[(?P<units>[0-9]+)\s*uni.\]"
DIAPERS_REGEX = [
    f".*{brand}.*{size}.*{units_label_1}",
    f".*{brand}.*{size}.*{units_label2}",
]
  • Talles. No tiene talles en la descripcion. Se obtienen de un JSON.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: Tienda Nube.
  • Inicialización. Normal.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.

Atributos extraidos para cada item:

>>> item = response.xpath('//div[contains(@class, "product-small")]')[0]
>>> item.xpath(".//p[contains(@class, 'product-title')]/a/text()").get()
'Pampers Premium Care Xxg Hpg x54'
>>> item.xpath(".//bdi/text()").get()
'3.470'
>>> item.xpath(".//p[contains(@class, 'product-title')]/a/@href").get()
'https://panaleradelta.com.ar/product/80681490-pampers-premium-care-xxg-hpg-54-x-02/'
>>> item.xpath(".//div[contains(@class, 'box-image')]//img/@src").get()
'https://panaleradelta.com.ar/wp-content/uploads/2021/05/thumbnail-8-300x300.jpg'

Paginado link:

>>> response.xpath('//a[contains(@class, "next")]/@href').get()
'https://panaleradelta.com.ar/product-category/panales-de-bebes/page/2/'

Agregar limpieza de talles.

  • Reemplazar [gde, gd, grande] por g
  • Reemplazar [med, mediano] por m
  • Reemplazar [peq, pequeño] por g
  • Reemplazar [xl] por xg
  • Reemplazar [xtr , extra ] por x
  • Inicialización. Normal.
  • Talles. Normal en algunos casos. Muchos tienen los talles dentro de un modal.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: Tienda Nube - prefixtdp.mitiendanube.com
  • Talles. No tiene talles en la descripcion. Se obtienen de un JSON.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: Tienda Nube.
  • Talles. No tiene talles en la descripcion. Se obtienen de un JSON.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: Tienda Nube.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: Mercado Shops.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: Tienda Nube.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: Tienda Nube.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: -
  • Talles. Algunos no tienen talles en la descripcion. Se obtienen de un JSON.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: Tienda Nube.
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: -
  • Talles. Normal.
  • Paginación. El paginado es dinámico a medida que se scrollea.
  • E-commerce: -
  • Talles. Normal.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: -
  • Talles. Puede ser engañoso porque cada item tiene el talle en la descripción pero el verdadero talle se encuentra en la publicación donde puede haber mas de un talle y cantidad por item.
  • Paginación. Se obtiene de manera normal con un 'siguiente' al final de página.
  • E-commerce: -

E-commerces

Tienda Nube

Todos los talles de este e-commerce se encuentra en un tag data-installments

[
  {
    "product_id": 123056300,
    "price_short": "$3.670",
    "price_long": "$3.670 ARS",
    "price_number": 3670,
    "compare_at_price_short": null,
    "compare_at_price_long": null,
    "compare_at_price_number": null,
    "stock": 2,
    "sku": null,
    "available": true,
    "contact": false,
    "option0": "L",
    "option1": null,
    "option2": null,
    "id": 479450037,
    "image": 327794945,
    "image_url": "//d3ugyf2ht6aenh.cloudfront.net/stores/808/715/products/d_nq_np_2x_949594-mla45187277620_032021-f1-054f1c41626cddce3d16547895797882-1024-1024.jpg",
    "installments_data": "{\"mercadopago\":{\"1\":{\"installment_value\":3670,\"installment_value_cents\":367000,\"interest\":0,\"total_value\":3670,\"without_interests\":true},\"3\":{\"installment_value\":1543.235,\"installment_value_cents\":154323.5,\"interest\":0.2615,\"total_value\":4629.705,\"without_interests\":false},\"6\":{\"installment_value\":907.4075,\"installment_value_cents\":90740.75,\"interest\":0.4835,\"total_value\":5444.445,\"without_interests\":false},\"9\":{\"installment_value\":712.91788888889,\"installment_value_cents\":71291.788888889,\"interest\":0.7483,\"total_value\":6416.261,\"without_interests\":false},\"12\":{\"installment_value\":623.86941666667,\"installment_value_cents\":62386.941666667,\"interest\":1.0399,\"total_value\":7486.433,\"without_interests\":false},\"18\":{\"installment_value\":540.91722222222,\"installment_value_cents\":54091.722222222,\"interest\":1.653,\"total_value\":9736.51,\"without_interests\":false},\"24\":{\"installment_value\":508.58554166667,\"installment_value_cents\":50858.554166667,\"interest\":2.3259,\"total_value\":12206.053,\"without_interests\":false}}}"
  },
  {
    "product_id": 123056300,
    "price_short": "$3.670",
    "price_long": "$3.670 ARS",
    "price_number": 3670,
    "compare_at_price_short": null,
    "compare_at_price_long": null,
    "compare_at_price_number": null,
    "stock": 0,
    "sku": null,
    "available": false,
    "contact": false,
    "option0": "XXL",
    "option1": null,
    "option2": null,
    "id": 479450038,
    "image": 327794750,
    "image_url": "//d3ugyf2ht6aenh.cloudfront.net/stores/808/715/products/xxg-x521-a12d4738d5d00b1a5a16547895797802-1024-1024.jpg",
    "installments_data": "{\"mercadopago\":{\"1\":{\"installment_value\":3670,\"installment_value_cents\":367000,\"interest\":0,\"total_value\":3670,\"without_interests\":true},\"3\":{\"installment_value\":1543.235,\"installment_value_cents\":154323.5,\"interest\":0.2615,\"total_value\":4629.705,\"without_interests\":false},\"6\":{\"installment_value\":907.4075,\"installment_value_cents\":90740.75,\"interest\":0.4835,\"total_value\":5444.445,\"without_interests\":false},\"9\":{\"installment_value\":712.91788888889,\"installment_value_cents\":71291.788888889,\"interest\":0.7483,\"total_value\":6416.261,\"without_interests\":false},\"12\":{\"installment_value\":623.86941666667,\"installment_value_cents\":62386.941666667,\"interest\":1.0399,\"total_value\":7486.433,\"without_interests\":false},\"18\":{\"installment_value\":540.91722222222,\"installment_value_cents\":54091.722222222,\"interest\":1.653,\"total_value\":9736.51,\"without_interests\":false},\"24\":{\"installment_value\":508.58554166667,\"installment_value_cents\":50858.554166667,\"interest\":2.3259,\"total_value\":12206.053,\"without_interests\":false}}}"
  },
  {
    "product_id": 123056300,
    "price_short": "$3.670",
    "price_long": "$3.670 ARS",
    "price_number": 3670,
    "compare_at_price_short": null,
    "compare_at_price_long": null,
    "compare_at_price_number": null,
    "stock": 4,
    "sku": null,
    "available": true,
    "contact": false,
    "option0": "XL",
    "option1": null,
    "option2": null,
    "id": 479450040,
    "image": 327794599,
    "image_url": "//d3ugyf2ht6aenh.cloudfront.net/stores/808/715/products/xg-x521-1b812341fa0e6b0ce616547895797703-1024-1024.jpg",
    "installments_data": "{\"mercadopago\":{\"1\":{\"installment_value\":3670,\"installment_value_cents\":367000,\"interest\":0,\"total_value\":3670,\"without_interests\":true},\"3\":{\"installment_value\":1543.235,\"installment_value_cents\":154323.5,\"interest\":0.2615,\"total_value\":4629.705,\"without_interests\":false},\"6\":{\"installment_value\":907.4075,\"installment_value_cents\":90740.75,\"interest\":0.4835,\"total_value\":5444.445,\"without_interests\":false},\"9\":{\"installment_value\":712.91788888889,\"installment_value_cents\":71291.788888889,\"interest\":0.7483,\"total_value\":6416.261,\"without_interests\":false},\"12\":{\"installment_value\":623.86941666667,\"installment_value_cents\":62386.941666667,\"interest\":1.0399,\"total_value\":7486.433,\"without_interests\":false},\"18\":{\"installment_value\":540.91722222222,\"installment_value_cents\":54091.722222222,\"interest\":1.653,\"total_value\":9736.51,\"without_interests\":false},\"24\":{\"installment_value\":508.58554166667,\"installment_value_cents\":50858.554166667,\"interest\":2.3259,\"total_value\":12206.053,\"without_interests\":false}}}"
  }
]

Sitios Tienda Nube:

API - EN Construccion

Stack

Aplicación Función
MongoDB Base de Datos no relacional donde guardaremos los items scrapeados.
Mongo-Express Administrador de MongoDB, nos permite visualizar los datos alamcenados en MongoDB rapidamente
Backend FastAPI - Aplicación de Backend que expondrá un endpoint /query-diapers
Scrapers Scrapy - Proyecto de scrapy similar a los realizamos en secciones anteriores

¿Como levantarlo?

Es muy sencillo utilizamos docker-compose de la siguiente manera.

docker-compose build
docker-compose up

Up & Running

Aqui un ejemplo de que parámetros acepta la API:

Screen Shot 2022-04-19 at 12 01 14

Y por aquí un ejemplo de como buscamos esos huggies G a menos de 11 UYU la unidad:

curl 'http://localhost:8080/query-diapers?sizes=g&brand=huggies&unit_price_lte=11' | jq
[
  {
    "description": "babysec ultra g (8.5 a 12 kg) - x120",
    "price": 1267.99,
    "url": "https://www.botiga.com.uy/babysec-ultra-g-8-5-a-12-kg-120u.html",
    "image": "https://www.botiga.com.uy/media/catalog/product/cache/1/small_image/210x/d58d44b981214661663244ef00ea7e30/6/6/66019.jpg",
    "website": "www.botiga.com.uy",
    "brand": "babysec",
    "size": "g",
    "target_kg_min": 8.5,
    "target_kg_max": 12,
    "units": 120,
    "unit_price": 10.57
  }
]

About

Diaper price as a Service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors