mirror of
https://github.com/catdevnull/preciazo.git
synced 2024-11-29 13:06:19 +00:00
Compare commits
3 commits
925175ba9d
...
c75f8c335c
Author | SHA1 | Date | |
---|---|---|---|
c75f8c335c | |||
a8d26f32a5 | |||
1d4133e1c8 |
13 changed files with 619 additions and 35 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -12,3 +12,5 @@ scraper/debug/
|
|||
scraper/x.tsv
|
||||
*.tmp
|
||||
target/
|
||||
.env
|
||||
.env*
|
BIN
bun.lockb
BIN
bun.lockb
Binary file not shown.
50
data/samples/Carrefour.txt
Normal file
50
data/samples/Carrefour.txt
Normal file
|
@ -0,0 +1,50 @@
|
|||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-frutilla-sachet-900-cc-734210/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-frutilla-brick-200-cc-734218/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-vainilla-brick-200-cc-734215/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-vainilla-sachet-900-cc-734204/p
|
||||
https://www.carrefour.com.ar/leche-protein-c-chocolate-la-serenisima-bot-larga-vida-1-l/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-cindor-50-mas-cacao-1-lt-721741/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-cindor-mocca-1-lt-724419/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-sense-caramel-1-l/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-ultra-0-grasa-vainilla-900-cc/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-la-serenisima-clasico-1-lt-728990/p
|
||||
https://www.carrefour.com.ar/leche-fermentada-kids-mix-de-frutas-actimel-100-g-724919/p
|
||||
https://www.carrefour.com.ar/milkshake_sabor_frutilla_nesquik_brick_x_190_cc_707121/p
|
||||
https://www.carrefour.com.ar/bebida-a-base-de-almendras-cindor-sabor-chocolate-1-lt-721995/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-la-serenisima-clasico-200-ml-728991/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-cindor-50-mas-cacao-200-ml-721740/p
|
||||
https://www.carrefour.com.ar/milkshake_sabor_banana_nesquik_brick_x_190_cc_707120/p
|
||||
https://www.carrefour.com.ar/leche-cindor-chocolatada-a-base-de-almendras-y-cacao%E2%80%8B-1-l-704526/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-chochoco-tetra-200-cc-726412/p
|
||||
https://www.carrefour.com.ar/chocolatada-en-polvo-dicomere-leche-de-coco-vegana-150-g-710587/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-bananita-dolca-185-cc-731527/p
|
||||
https://www.carrefour.com.ar/leche-de-almendras-silk-endulzada-tetra-1-lt-726379/p
|
||||
https://www.carrefour.com.ar/leche-de-almendras-silk-de-coco-tetra-1-lt-726380/p
|
||||
https://www.carrefour.com.ar/alimento-vegetal-silk-fermentado-a-base-de-coco-%E2%80%8B300-g-702734/p
|
||||
https://www.carrefour.com.ar/la-serenisima-100---vegetal-chocolate-con-mani-1-lt-726421/p
|
||||
https://www.carrefour.com.ar/bebida-a-base-de-coco-silk-sin-azucar-1-l%E2%80%8B-698743/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-cindor-1-lt-719377/p
|
||||
https://www.carrefour.com.ar/nesquik-extra-cacao-chocolatada-listo-para-tomar-200-ml-724442/p
|
||||
https://www.carrefour.com.ar/leche-chocolatada-nesquik-fortificado-200-cc-724441/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-uat-0-grasa-frutilla-1000-cc/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-uat-vainilla-1000-cc/p
|
||||
https://www.carrefour.com.ar/leche-fermentada-actimel-sabor-frutilla-100-cc-724916/p
|
||||
https://www.carrefour.com.ar/leche-fermentada-plus-guarana-y-frutos-rojos-actimel-100-g-726736/p
|
||||
https://www.carrefour.com.ar/leche-fermentada-multifruta-actimel-100-g-724917/p
|
||||
https://www.carrefour.com.ar/bebida-lactea-la-serenisima-uat-0-grasa-vainilla-1000-cc/p
|
||||
https://www.carrefour.com.ar/leche-chocotalada-uat-cindor-tetra-200-cc-719376/p
|
||||
https://www.carrefour.com.ar/alimento-bebible-vegetal-la-serenisima-sabor-coco-1-lt-719131/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-la-serenisima-zero-lactosa-400-g-677890/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-la-lechera-entera-400-g-721596/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-la-lechera-entera-800-g-721597/p
|
||||
https://www.carrefour.com.ar/bebida-a-base-de-proteinas-lacteas-molico-bolsa-800-g-684792/p
|
||||
https://www.carrefour.com.ar/golden-milk-dicomere-leche-en-polvo-de-coco-vegano-150-g-710588/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-descremada-svelty-370-g-729420/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-nido-fortigrow-800-g-725006/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-descremada-molico-bolsa-800-g-684793/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-sancor-bebe-3-advanced-800-g-706144/p
|
||||
https://www.carrefour.com.ar/leche-en-polvo-entera-franz-con-vitamina-a-y-d-800-g-707100/p
|
||||
https://www.carrefour.com.ar/leche-de-almendras-silk-sin-azucar-tetra-1-lt-726378/p
|
||||
https://www.carrefour.com.ar/alimento-veg-beb-la-serenisima-almendra-s-azucar-1000-cc/p
|
||||
https://www.carrefour.com.ar/alimento-bebible-a-base-de-almendras-la-serenisima-1-l/p
|
||||
https://www.carrefour.com.ar/leche-de-almendras-silk-de-coco-sin-azucar-tetra-1-lt-726381/p
|
250
data/samples/Coto.txt
Normal file
250
data/samples/Coto.txt
Normal file
|
@ -0,0 +1,250 @@
|
|||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-%0D%0Atraje-de-bano-hombre-rayado-talle-46%0D%0A/_/A-00560152-00560152-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-101-cuentos-cortos-para-compartir/_/A-00509350-00509350-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-101-cuentos-de-magia-y-aventuras/_/A-00509349-00509349-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-128-luces-led-x100-multicolor-3aa---/_/A-00542386-00542386-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-144-luces-led-x100-blancas-3aa---/_/A-00542385-00542385-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-1era-infancia-autobus-intera-mickey-mouse---/_/A-00560856-00560856-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-1era-infancia-cubo-prono-granja---/_/A-00566723-00566723-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-1era-infancia-plush-sleeping-peluche-mickey---/_/A-00560857-00560857-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-1era-infancia-plush-sleeping-peluche-minnie---/_/A-00560858-00560858-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-243-luces-led-x-30-blancas-3aa---/_/A-00542388-00542388-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-24-banditas-elasticas-redondas-sin-metal-basicare/_/A-00515946-00515946-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-de-enmascarar-18mm-x-40m---caja-precortada/_/A-00456793-00456793-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-de-enmascarar-24mm-x-40m---caja-precortada/_/A-00456790-00456790-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-de-enmascarar-36mm-x-40m---caja-precortada/_/A-00456810-00456810-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-de-enmascarar-48mm-x-40m---caja-precortada/_/A-00456811-00456811-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-ducto-2910-gris-48mmx91m-%0D%0A/_/A-00478343-00478343-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-3m-cinta-ducto-3920-negra-48mmx18m%0D%0A/_/A-00478344-00478344-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-400-luces-microled-x100blancas3aa---/_/A-00542391-00542391-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-440-luces-microled-x30-blanca-3aa---/_/A-00542387-00542387-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-480-luces-microled-x50-blancas-3a/_/A-00542390-00542390-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-4-en-linea-mini-ruibal/_/A-00112199-00112199-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-840-luces-led-x-50-blancas-3aa---/_/A-00542389-00542389-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-8-hermanos-azul-anis-botella-de-1-litro/_/A-00002315-00002315-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-abadejo-entero-eviscerado-congelado-x-kg/_/A-00017794-00017794-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-abrelata-mariposa-loekemeyer-bli-1-uni/_/A-00005012-00005012-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-abrel-loerem-ua-1-un/_/A-00006716-00006716-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-abrochadora-maped-office-1-unidad-n-10/_/A-00286817-00286817-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-accesorio-stick-masaje-drb-turquesa-gris/_/A-00524517-00524517-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-2t-para-motos-1ltr-bardahl%0D%0A/_/A-00198031-00198031-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-2t-para-motos-200cc-bardahl/_/A-00198032-00198032-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-aerosol-mazola-maiz-rocio-vegetal-aer-120-grm/_/A-00267185-00267185-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-antiadherente-manteca-mazola-aer-120-grm/_/A-00267186-00267186-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-bronceador-fps-4-hawaiian-tropic-240ml/_/A-00467670-00467670-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-virgen-cormillot-bot-250-ml/_/A-00512147-00512147-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-virgen-coto-botella-500-ml/_/A-00218338-00218338-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-virgen-krol---botella-250-ml/_/A-00172850-00172850-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-virgen-krol---botella-500-ml/_/A-00175047-00175047-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-y-ajo-krol-bot-250-ml/_/A-00500950-00500950-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-y-albahaca-krol-bot-250-ml/_/A-00500949-00500949-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-y-cebolla-krol-bot-250-ml/_/A-00500951-00500951-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-canola-y-limon-krol-bot-250-ml/_/A-00500952-00500952-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-almendras-landa-30-ml/_/A-00559709-00559709-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-argan-landa-30-ml/_/A-00559701-00559701-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-dende-cepera-100-ml/_/A-00547003-00547003-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-jojoba-landa-30ml/_/A-00559707-00559707-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-maiz-arcor-890-ml/_/A-00539092-00539092-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-maiz-clasico-mazola-900ml/_/A-00257043-00257043-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-oliva-extra-virgen-clasico-500ml/_/A-00572174-00572174-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-oliva-extra-virgen-clasico-lira-1l/_/A-00572175-00572175-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-oliva-virgen-extra-suave-nucete-500ml/_/A-00296136-00296136-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-ricino-landa-30ml/_/A-00559706-00559706-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-de-rosa-mosqueta-landa-30-ml/_/A-00559708-00559708-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-fritolim-manteca-120-gr-fritolim-aer-12-kgm/_/A-00263388-00263388-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-genecelf-multig-20w50-1l-total%0D%0A/_/A-00298157-00298157-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-genecelf-multig-20w50-4l-total%0D%0A/_/A-00298156-00298156-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-girasol--cada-dia--botella-900-ml/_/A-00003033-00003033-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-girasol-coto-aerosol-120-gr/_/A-00179641-00179641-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-girasol-natura-rocio-vegetal-aerosol-120-gr/_/A-00263797-00263797-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-girasol--pureza---botella-15-l/_/A-00497066-00497066-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-girasol--pureza---botella-900-ml/_/A-00497065-00497065-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-maiz-arcor-botella-900-ml/_/A-00247948-00247948-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-maiz--lira-pet-900-ml/_/A-00510431-00510431-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-mezcla-canola-y-chia-virgen-krol---botella-250-ml/_/A-00282204-00282204-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-mezcla-canola-y-oliva--krol---botella-250-ml/_/A-00230679-00230679-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-mezcla-canola-y-oliva--krol---botella-500-ml/_/A-00230680-00230680-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-mezcla-girasol-y-oliva-natura-500-ml/_/A-00481089-00481089-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-mezcla-girasol-y-oliva-natura-botella-900-ml/_/A-00268144-00268144-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-motor-4t-para-motos-1ltr-bardahl%0D%0A/_/A-00198040-00198040-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-andino-natura-500ml/_/A-00576037-00576037-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-de-cecco-extra-virgen-bot-500-ml/_/A-00172205-00172205-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-clasico-nucete-1000ml/_/A-00562868-00562868-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-cocinero-1l/_/A-00562395-00562395-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-cocinero-250ml/_/A-00562394-00562394-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-cocinero-500ml/_/A-00562393-00562393-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-colavita--750ml/_/A-00562249-00562249-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-con-oliva-la-toscana-bot-250-ml/_/A-00480493-00480493-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-filippo-ber-bot-500-cmq/_/A-00210325-00210325-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-fruttato-filippo-berio-bot-500-ml/_/A-00195703-00195703-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-intenso-cocinero-500ml/_/A-00515792-00515792-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-la-toscana-con-albahaca-botella-250-ml/_/A-00236162-00236162-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-la-toscana-con-limon-botella-250-ml/_/A-00267254-00267254-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-morixe-500ml/_/A-00513717-00513717-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-nucete---lata-500-ml/_/A-00162778-00162778-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-oliovita-500ml/_/A-00025251-00025251-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-oliovita-botella-500-ml/_/A-00184369-00184369-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-oliovita-botella-500-ml/_/A-00194454-00194454-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extra-virgen-suave-cocinero-500ml/_/A-00515794-00515794-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-extvirg-filippo-ber-bot-250-ml/_/A-00195700-00195700-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-fuerte-natura-500ml/_/A-00576036-00576036-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-la-toscana-con-pesto-botella-250-ml/_/A-00468302-00468302-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva--nucete---lata-500-ml/_/A-00021386-00021386-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-suave-natura-500ml/_/A-00576035-00576035-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-cebila-500ml/_/A-00512396-00512396-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-cocinero-1l/_/A-00562397-00562397-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-blend-zuelo-lat-1000-ml/_/A-00521714-00521714-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-ciudad-del-lago--botella-250-ml/_/A-00485927-00485927-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-ciudad-del-lago--botella-500-ml/_/A-00485926-00485926-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-clasico-nucete-2l/_/A-00510405-00510405-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-coratina-zuccardi-250ml/_/A-00570402-00570402-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-c-zuelo-bot-250-ml/_/A-00511022-00511022-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-c-zuelo-bot-500-ml/_/A-00511013-00511013-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-genovesa-zuccardi-250ml/_/A-00570405-00570405-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-genovesa-zuccardi-500ml/_/A-00570407-00570407-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-intenso-nucete-500ml/_/A-00574739-00574739-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-intenso-zuelo-lat-500-ml/_/A-00521713-00521713-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-i-zuelo-bot-500-ml/_/A-00511018-00511018-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-la-toscana-con-ajo-botella-250-ml/_/A-00236161-00236161-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-nucete---botella-500-ml/_/A-00021215-00021215-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita-botella-1-l/_/A-00481562-00481562-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita--botella-250-ml/_/A-00190515-00190515-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita-botella-250-ml/_/A-00206952-00206952-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita---botella-500-ml/_/A-00240899-00240899-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita--botella-500-ml/_/A-00479458-00479458-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita-mediterraneo-botella-500-ml/_/A-00245154-00245154-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-oliovita-mediterraneo-botella-500-ml/_/A-00465346-00465346-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-organica-zuelo-250-ml/_/A-00534644-00534644-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-organico-zuelo-500-ml/_/A-00534645-00534645-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-picual-zuccardi-250ml/_/A-00570406-00570406-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-piscual-zuccardi-500ml/_/A-00570404-00570404-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-suave-la-toscana-250ml/_/A-00570403-00570403-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-suave-la-toscana-500ml/_/A-00570409-00570409-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-extra-s-zuelo-bot-500-ml/_/A-00511014-00511014-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-natura-aerosol-120-gr/_/A-00283953-00283953-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-oliva-virgen-nucete-1l/_/A-00501317-00501317-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-p-moto-4-cruise-15w50-1l-elf%0D%0A/_/A-00460748-00460748-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-p-moto-4-road-15w50-1l-elf%0D%0A/_/A-00205956-00205956-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-protector-fps10-villeneuve-190ml/_/A-00572159-00572159-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-puro-baby-johnsons-100ml/_/A-00568122-00568122-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-quartz-9000-5w40-1l-total%0D%0A/_/A-00242672-00242672-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-rocio-vegetal--canuelas-girasol-aerosol-187-ml/_/A-00484971-00484971-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-rocio-vegetal--nucete-oliva-aerosol-150-ml/_/A-00482859-00482859-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-rocio-vegetal-sabor-manteca-lira-aer-120-grm/_/A-00529622-00529622-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-rocio-vegetal-virgen-extra-canuelas---aerosol-187-ml/_/A-00484970-00484970-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceites-de-dende-palm-cepera-200-cmq/_/A-00134316-00134316-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-total-quartz-5000-15w-40-4-l/_/A-00473185-00473185-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-total-quartz-7000-10w40-1l-total%0D%0A/_/A-00195391-00195391-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-total-quartz-7000-10w-40-4-l/_/A-00195390-00195390-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-total-quartz-9000-5w-40-4-l/_/A-00265946-00265946-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceite-total-quartz-ineo-mc3-5w-30-4-l/_/A-00473195-00473195-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-a-la-italiana-castell-340g/_/A-00573358-00573358-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-a-la-it-castell-fra-340-grm/_/A-00515751-00515751-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-castell-pouch-200-gr/_/A-00086460-00086460-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-castell-pouch-300-gr/_/A-00100351-00100351-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-descarozadas-nucete-360g/_/A-00101924-00101924-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-en-salmuera-nucete-220-grm/_/A-00548385-00548385-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-nucete-------frasco-330-gr/_/A-00101922-00101922-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-premium-castell-340g/_/A-00573359-00573359-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-premium-castell-fra-340-grm/_/A-00515749-00515749-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-vanoli-150-gr/_/A-00263031-00263031-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-vanoli-------frasco-330-gr/_/A-00298223-00298223-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-negras-yovinessa-frasco-330-gr/_/A-00234350-00234350-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-c-atun-stabz-lat-200-grm/_/A-00528745-00528745-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-alcaparras-stabz-lat-200-grm/_/A-00528743-00528743-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-anchoas-stabz-200-grm/_/A-00528744-00528744-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-jalapenos-stabz-lat-200-grm/_/A-00528740-00528740-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-morrones-castell-300gr/_/A-00100352-00100352-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-pasta-de-limon-stabz-200-grm/_/A-00545116-00545116-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-pimientos-stabz-lat-200-grm/_/A-00528739-00528739-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-rellenas-con-salmon-stabz-lat-200-grm/_/A-00528741-00528741-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-a-la-italiana-castell-340g/_/A-00573361-00573361-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-a-la-it-castell-fra-340-grm/_/A-00515750-00515750-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-castell----en-rodajas---pouch-180-gr/_/A-00086457-00086457-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-castell----en-rodajas---pouch-300-gr/_/A-00220073-00220073-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-castell-------pouch-200-gr/_/A-00063853-00063853-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-castell-rellena-morrones-----pouch-200-gr/_/A-00086459-00086459-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-cebila-180g/_/A-00491175-00491175-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-descarozadas-castell-180gr/_/A-00086458-00086458-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-descarozadas-cebila-150-gr/_/A-00491177-00491177-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-descarozadas-nucete-220g/_/A-00548383-00548383-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-descarozadas-nucete-360g/_/A-00101923-00101923-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-en-rodajas-nucete-220-grm/_/A-00548387-00548387-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-en-salmuera-nucete-220g/_/A-00548386-00548386-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-nucete---descarozada----frasco-330-gr/_/A-00072401-00072401-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-nucete---descarozada----sachet-180-gr/_/A-00030099-00030099-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-nucete-------frasco-330-gr/_/A-00072400-00072400-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-nucete-----premium-frasco-360-gr/_/A-00165846-00165846-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-nucete-rellena-morrones---premium-frasco-360-gr/_/A-00104033-00104033-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-para-ensaladas-nucete-220g/_/A-00548382-00548382-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-premium-castell-340g/_/A-00573362-00573362-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-premium-castell-fra-340-grm/_/A-00515753-00515753-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-premium-yovinessa-fra-360-grm/_/A-00515762-00515762-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellena-castell-fra-340-grm/_/A-00515752-00515752-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-cebila-100-gr/_/A-00485900-00485900-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-cebila-180-gr/_/A-00486164-00486164-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-morron-yovinessa-330g/_/A-00209031-00209031-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-pasta-de-ajo-nucete-330-grm/_/A-00548389-00548389-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-pasta-de-cebolla-nucete-330-grm/_/A-00548390-00548390-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-pasta-de-jalapeno-nucete-330-grm/_/A-00548391-00548391-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-pasta-de-morron-nucete-220-grm/_/A-00548384-00548384-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-con-pasta-sabor-limon-nucete-330-grm/_/A-00548381-00548381-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellenas-premium-castell-340g/_/A-00573360-00573360-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-rellena-yovinessa-fra-360-grm/_/A-00515761-00515761-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-300g/_/A-00262716-00262716-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli---descarozada----pouch-150-gr/_/A-00262801-00262801-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-en-rodajas-frasco-330-gr/_/A-00465097-00465097-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-----linea-selecta-frasco-320-gr/_/A-00271683-00271683-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-pouch-150-gr/_/A-00262715-00262715-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-rellena-morrones-descarozada----pouch-300-gr/_/A-00261901-00261901-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-rellenas-330-gr/_/A-00261904-00261904-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-vanoli-tradicional-330-gr/_/A-00261902-00261902-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-descarozada-frasco-330-gr/_/A-00007090-00007090-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-descarozada-frasco-330-gr/_/A-00209034-00209034-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa---descarozada----sachet-150-gr/_/A-00247702-00247702-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa----en-rodajas---sachet-80-gr/_/A-00247700-00247700-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-------frasco-330-gr/_/A-00007088-00007088-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-------pouch-250-gr/_/A-00007106-00007106-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-------pouch-900-gr/_/A-00241661-00241661-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-premium-frasco-330-gr/_/A-00212532-00212532-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-premium-frasco-660-gr/_/A-00209035-00209035-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceitunas-verdes-yovinessa-sachet-130-gr/_/A-00242498-00242498-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceituna-verde-castell-300gr/_/A-00100354-00100354-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceituna-verde-descarozadas-castell-300gr/_/A-00100353-00100353-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceituna-verde-descarozadas-castell-850gr/_/A-00235212-00235212-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceituna-verdes-rellenas-con-morrones-yovinessa-160g/_/A-00007108-00007108-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-congelada-granja-del-sol-500g/_/A-00565168-00565168-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-congelada-lucchetti-450g/_/A-00565184-00565184-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-fresca-santa-maria-bol-300-grm/_/A-00532418-00532418-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-green-life-550g/_/A-00578347-00578347-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-hidroponica-pack-choi-compostela-1u/_/A-00572941-00572941-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-lavada-y-cortada-sueno-verde-x-400-gr/_/A-00186721-00186721-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-rie-la-huerta-500g/_/A-00576905-00576905-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acelga-x-uni/_/A-00040156-00040156-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-a-base-de-crema-antichi-colli-bot-250-ml/_/A-00531990-00531990-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-ahumado-casalta-400-cc/_/A-00210064-00210064-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-clasico-casalta-500ml/_/A-00567777-00567777-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-de-modena-colavita-500ml/_/A-00213419-00213419-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-di-modena-fini-500-ml/_/A-00547011-00547011-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-di-modena-san-giorgio-250-ml/_/A-00546999-00546999-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-enrico-baronese-chardonnay-375-cc/_/A-00119600-00119600-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-enrico-baronese-malbec-375-cc/_/A-00119599-00119599-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-filippo-ber-bot-250-ml/_/A-00196110-00196110-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-la-toscana-250-ml/_/A-00494654-00494654-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-menoyo-250-cc/_/A-00198472-00198472-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-menoyo-500-cc/_/A-00201560-00201560-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-oliovita-250ml/_/A-00569750-00569750-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-reduccion-enrico-baronese-bot-375-cmq/_/A-00532960-00532960-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-reduccion-menoyo-250-ml/_/A-00497571-00497571-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-reduccion-menoyo-250-ml/_/A-00497596-00497596-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-reduccion-oliovita-250ml/_/A-00569739-00569739-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-san-giorgio-bot-250-ml/_/A-00524780-00524780-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-san-giorgio-frutos-de-bosque-andino-250-cc/_/A-00133800-00133800-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-balsamico-tipo-reduccion-casalta-500ml/_/A-00567779-00567779-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-con-humo-liquido-san-giorgio-250-ml/_/A-00546995-00546995-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-glaze-basil-pe-de-nigris-pet-250-ml/_/A-00489739-00489739-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-glaze-fusion-s-de-nigris-pet-250-ml/_/A-00489748-00489748-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-manzana-granny-enrico-baro-bot-375-cmq/_/A-00476420-00476420-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-reduccion-casalta-bot-400-cmq/_/A-00210065-00210065-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-aceto-reduccion-lira-250-ml/_/A-00539903-00539903-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-ackids-proteccion-nat-plusbelle-bot-700-ml/_/A-00512470-00512470-200
|
||||
https://www.cotodigital3.com.ar/sitios/cdigi/producto/-acondicionador-aclarante-tio-nacho-400ml/_/A-00572067-00572067-200
|
50
data/samples/Dia.txt
Normal file
50
data/samples/Dia.txt
Normal file
|
@ -0,0 +1,50 @@
|
|||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-canuelas-15-lts-73552/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-cocinero-900-ml-48605/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-cocinero-alto-oleico-15-lts-267710/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-dia-15-lts-24114/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-dia-900-ml-226068/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-legitimo-900-ml-56453/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-lira-15-lts-264923/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-natura-15-lts-78856/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-pureza-15-lts-265505/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-girasol-pureza-900-ml-265504/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-maiz-lira-900-ml-270738/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-cocinero-extra-virgen-intenso-500-ml-276153/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-cocinero-extra-virgen-suave-500-ml-276154/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-extra-virgen-cocinero-500-ml-296498/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-extra-virgen-lira-500-ml-299225/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-morixe-extra-virgen-250-ml-289004/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-de-oliva-morixe-virgen-500-ml-276048/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-en-aerosol-dia-120-gr-53460/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-girasol-alsamar-15-lts-272259/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-oliva-nucete-extra-virgen-envase-de-vidrio-500-ml-179862/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-para-hornillos-gardenia-organic-spa-12-ml-269348/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-para-hornillos-jazmin---bambu-organic-spa-12-ml-269347/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-para-hornillos-vainilla-organic-spa-12-ml-269350/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceite-para-hornillos-verbena-y-fresias-organic-spa-12-ml-269349/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceitunas-negras-nucete-en-salmuera-190-gr-286869/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceitunas-verdes-castell-180-gr-295511/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceitunas-verdes-rellenas-doy-pack-castell-180-gr-56152/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verde-castell-descarozada-doypack-70-gr-106457/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verde-castell-rellena-doypack-90-gr-27243/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verde-descarozada-castell-150-gr-295512/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verde-descarozada-castell-80-gr-295513/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verde-en-rodajas-castell-150-gr-171781/p
|
||||
https://diaonline.supermercadosdia.com.ar/aceituna-verdes-en-rodajas-doy-pack-castell-80-gr-295509/p
|
||||
https://diaonline.supermercadosdia.com.ar/acelga-congelada-granja-del-sol-500-gr-20325/p
|
||||
https://diaonline.supermercadosdia.com.ar/acondicionadores-echo-doypack-450-cc-271367/p
|
||||
https://diaonline.supermercadosdia.com.ar/actimel-kids-banana-y-frutilla-100-gr-20811/p
|
||||
https://diaonline.supermercadosdia.com.ar/aderezo-a-base-de-mostaza-dia-220-gr-125442/p
|
||||
https://diaonline.supermercadosdia.com.ar/aderezo-balsamico-sueno-verde-200-gr-292384/p
|
||||
https://diaonline.supermercadosdia.com.ar/aderezo-notmayo-picante-notco-325-gr-272859/p
|
||||
https://diaonline.supermercadosdia.com.ar/aderezo-pesto-de-albahaca-sueno-verde-170-gr-278591/p
|
||||
https://diaonline.supermercadosdia.com.ar/aderezo-sueno-verde-coleslaw-200-ml-267282/p
|
||||
https://diaonline.supermercadosdia.com.ar/adobo-para-pizza-la-parmesana-20-gr-298851/p
|
||||
https://diaonline.supermercadosdia.com.ar/aerosol-desinfectante-original-lysoform-380-ml-122974/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-con-gas-villavicencio-500-ml-298971/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-de-mesa-kin-sin-gas-225-lts-238290/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-de-mesa-kin-sin-gas-500-ml-118148/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-fina-saborizada-h2oh-citrus-225-lts-127615/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-mineralizada-sin-tacc-dia-225-lt-295396/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-mineral-sierra-de-los-padres-15-lts-215485/p
|
||||
https://diaonline.supermercadosdia.com.ar/agua-mineral-sin-gas-dia-2-lts-48123/p
|
16
db-datos/supermercado.ts
Normal file
16
db-datos/supermercado.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
export enum Supermercado {
|
||||
Dia = "Dia",
|
||||
Carrefour = "Carrefour",
|
||||
Coto = "Coto",
|
||||
}
|
||||
|
||||
export const hosts: { [host: string]: Supermercado } = {
|
||||
"diaonline.supermercadosdia.com.ar": Supermercado.Dia,
|
||||
"www.carrefour.com.ar": Supermercado.Carrefour,
|
||||
"www.cotodigital3.com.ar": Supermercado.Coto,
|
||||
};
|
||||
export const colorBySupermercado: { [supermercado in Supermercado]: string } = {
|
||||
[Supermercado.Dia]: "#d52b1e",
|
||||
[Supermercado.Carrefour]: "#19549d",
|
||||
[Supermercado.Coto]: "#e20025",
|
||||
};
|
225
scraper/auto.ts
Normal file
225
scraper/auto.ts
Normal file
|
@ -0,0 +1,225 @@
|
|||
import "dotenv/config";
|
||||
import { mkdtemp, access } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join, resolve } from "node:path";
|
||||
import { spawn } from "node:child_process";
|
||||
import { Supermercado } from "db-datos/supermercado.js";
|
||||
import PQueue from "p-queue";
|
||||
import { format, formatDuration, intervalToDuration } from "date-fns";
|
||||
import { parseWarc } from "./scrap.js";
|
||||
import { S3Client } from "@aws-sdk/client-s3";
|
||||
import { Upload } from "@aws-sdk/lib-storage";
|
||||
import { BunFile } from "bun";
|
||||
|
||||
if (
|
||||
!process.env.S3_ACCESS_KEY_ID ||
|
||||
!process.env.S3_SECRET_ACCESS_KEY ||
|
||||
!process.env.S3_BUCKET_NAME
|
||||
)
|
||||
throw new Error("missing s3 creds");
|
||||
if (!process.env.TELEGRAM_BOT_TOKEN)
|
||||
console.warn("no hay TELEGRAM_BOT_TOKEN, no voy a loggear por allá");
|
||||
if (!process.env.TELEGRAM_BOT_CHAT_ID)
|
||||
console.warn("no hay TELEGRAM_BOT_CHAT_ID, no voy a loggear por allá");
|
||||
const { S3_BUCKET_NAME, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY } = process.env;
|
||||
|
||||
// https://www.backblaze.com/docs/cloud-storage-use-the-aws-sdk-for-javascript-v3-with-backblaze-b2
|
||||
const s3 = new S3Client({
|
||||
endpoint: "https://s3.us-west-004.backblazeb2.com",
|
||||
region: "us-west-004",
|
||||
credentials: {
|
||||
accessKeyId: S3_ACCESS_KEY_ID,
|
||||
secretAccessKey: S3_SECRET_ACCESS_KEY,
|
||||
},
|
||||
});
|
||||
|
||||
const supermercados: Supermercado[] = [
|
||||
Supermercado.Carrefour,
|
||||
Supermercado.Coto,
|
||||
Supermercado.Dia,
|
||||
];
|
||||
|
||||
// hacemos una cola para la compresión para no sobrecargar la CPU
|
||||
const compressionQueue = new PQueue({ concurrency: 1 });
|
||||
|
||||
// hacemos una cola para el scrapeo para no tener varios writers a la BD y no sobrecargar la CPU
|
||||
const scrapQueue = new PQueue({ concurrency: 1 });
|
||||
|
||||
supermercados.forEach(downloadList);
|
||||
// await recompress("sqlite.db.gz", "sqlite.db.zst");
|
||||
|
||||
async function downloadList(supermercado: Supermercado) {
|
||||
const listPath = resolve(
|
||||
join(process.env.LISTS_DIR ?? "../data", `${supermercado}.txt`)
|
||||
);
|
||||
const date = new Date();
|
||||
const ctxPath = await mkdtemp(join(tmpdir(), "preciazo-scraper-wget-"));
|
||||
const zstdWarcName = `${supermercado}-${format(
|
||||
date,
|
||||
"yyyy-MM-dd-HH:mm"
|
||||
)}.warc.zst`;
|
||||
const zstdWarcPath = join(ctxPath, zstdWarcName);
|
||||
const subproc = Bun.spawn({
|
||||
cmd: [
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=3",
|
||||
"--delete-after",
|
||||
"--input-file",
|
||||
listPath,
|
||||
`--warc-file=temp`,
|
||||
],
|
||||
stderr: "ignore",
|
||||
stdout: "ignore",
|
||||
cwd: ctxPath,
|
||||
});
|
||||
const t0 = performance.now();
|
||||
await subproc.exited;
|
||||
inform(`wget para ${zstdWarcName} tardó ${formatMs(performance.now() - t0)}`);
|
||||
|
||||
const gzippedWarcPath = join(ctxPath, "temp.warc.gz");
|
||||
if (!(await exists(gzippedWarcPath))) {
|
||||
const err = report(`no encontré el ${gzippedWarcPath}`);
|
||||
throw err;
|
||||
}
|
||||
|
||||
await compressionQueue.add(() => recompress(gzippedWarcPath, zstdWarcPath));
|
||||
if (!(await exists(zstdWarcPath))) {
|
||||
const err = report(`no encontré el ${zstdWarcPath}`);
|
||||
throw err;
|
||||
}
|
||||
|
||||
scrapAndInform({ zstdWarcPath, zstdWarcName });
|
||||
|
||||
try {
|
||||
await uploadToBucket({
|
||||
fileName: zstdWarcName,
|
||||
file: Bun.file(zstdWarcPath),
|
||||
});
|
||||
} catch (error) {
|
||||
inform(`Falló subir ${zstdWarcName} a S3; ${error}`);
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function scrapAndInform({
|
||||
zstdWarcPath,
|
||||
zstdWarcName,
|
||||
}: {
|
||||
zstdWarcPath: string;
|
||||
zstdWarcName: string;
|
||||
}) {
|
||||
const res = await scrapQueue.add(async () => {
|
||||
const t0 = performance.now();
|
||||
const progress = await parseWarc(zstdWarcPath);
|
||||
return { took: performance.now() - t0, progress };
|
||||
});
|
||||
|
||||
if (res) {
|
||||
const { took, progress } = res;
|
||||
inform(
|
||||
`Procesado ${zstdWarcName} (${progress.done} ok, ${
|
||||
progress.errors.length
|
||||
} errores) (tardó ${formatMs(took)})`
|
||||
);
|
||||
} else {
|
||||
inform(`Algo falló en ${zstdWarcName}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* toma un archivo gzippeado y lo recomprime con zstd.
|
||||
* borra el archivo original.
|
||||
*/
|
||||
function recompress(inputPath: string, outputPath: string) {
|
||||
// XXX: por alguna razón no funciona en Bun 1.0.20
|
||||
// const decompressor = Bun.spawn({
|
||||
// cmd: ["gzip", "-dc", inputPath],
|
||||
// stderr: "inherit",
|
||||
// });
|
||||
// const compressor = Bun.spawn({
|
||||
// cmd: ["zstd", "-T0", "-15", "--long", "-o", outputPath],
|
||||
// stdin: decompressor.stdout,
|
||||
// // stderr: "inherit",
|
||||
// });
|
||||
// const errorCode = await compressor.exited;
|
||||
// if (errorCode !== 0) {
|
||||
// const err = report(`zstd threw error code ${errorCode}`);
|
||||
// throw err;
|
||||
// }
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const decompressor = spawn("gzip", ["-dc", inputPath], {
|
||||
stdio: [null, "pipe", null],
|
||||
});
|
||||
const compressor = spawn(
|
||||
"zstd",
|
||||
["-T0", "-15", "--long", "-o", outputPath],
|
||||
{
|
||||
stdio: ["pipe", null, null],
|
||||
}
|
||||
);
|
||||
// @ts-expect-error a los types de bun no le gusta????
|
||||
decompressor.stdout.pipe(compressor.stdin);
|
||||
compressor.on("close", (code) => {
|
||||
if (code !== 0) {
|
||||
const err = report(`zstd threw error code ${code}`);
|
||||
reject(err);
|
||||
}
|
||||
resolve(void 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function uploadToBucket({
|
||||
fileName,
|
||||
file,
|
||||
}: {
|
||||
fileName: string;
|
||||
file: BunFile;
|
||||
}) {
|
||||
const parallelUploads3 = new Upload({
|
||||
client: s3,
|
||||
params: {
|
||||
Bucket: S3_BUCKET_NAME,
|
||||
Key: fileName,
|
||||
Body: file,
|
||||
},
|
||||
});
|
||||
await parallelUploads3.done();
|
||||
}
|
||||
|
||||
function inform(msg: string) {
|
||||
sendTelegramMsg(msg);
|
||||
console.info(msg);
|
||||
}
|
||||
function report(msg: string) {
|
||||
inform(msg);
|
||||
const error = new Error(msg);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
async function exists(path: string) {
|
||||
try {
|
||||
access(path);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function sendTelegramMsg(text: string) {
|
||||
if (!process.env.TELEGRAM_BOT_TOKEN || !process.env.TELEGRAM_BOT_CHAT_ID)
|
||||
return;
|
||||
const url = new URL(
|
||||
`https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMessage`
|
||||
);
|
||||
url.searchParams.set("chat_id", process.env.TELEGRAM_BOT_CHAT_ID);
|
||||
url.searchParams.set("text", text);
|
||||
await fetch(url);
|
||||
}
|
||||
|
||||
function formatMs(ms: number) {
|
||||
return formatDuration(intervalToDuration({ start: 0, end: Math.round(ms) }));
|
||||
}
|
|
@ -11,11 +11,15 @@
|
|||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.478.0",
|
||||
"@aws-sdk/lib-storage": "^3.478.0",
|
||||
"date-fns": "^3.0.6",
|
||||
"db-datos": "workspace:^",
|
||||
"dotenv": "^16.3.1",
|
||||
"drizzle-orm": "^0.29.1",
|
||||
"linkedom": "^0.16.5",
|
||||
"nanoid": "^5.0.4",
|
||||
"p-map": "^7.0.0",
|
||||
"p-queue": "^8.0.1",
|
||||
"undici": "^6.2.0",
|
||||
"warcio": "^2.2.1",
|
||||
"zod": "^3.22.4"
|
||||
|
|
|
@ -8,7 +8,6 @@ import { getCarrefourProduct } from "./parsers/carrefour.js";
|
|||
import { getDiaProduct } from "./parsers/dia.js";
|
||||
import { getCotoProduct } from "./parsers/coto.js";
|
||||
import { join } from "path";
|
||||
import pMap from "p-map";
|
||||
import { and, eq, sql } from "drizzle-orm";
|
||||
|
||||
const DEBUG = false;
|
||||
|
@ -33,10 +32,11 @@ const getPrevPrecio = db
|
|||
.limit(1)
|
||||
.prepare();
|
||||
|
||||
let progress = { done: 0, errors: 0 };
|
||||
await pMap(process.argv.slice(2), (path) => parseWarc(path), {
|
||||
concurrency: 40,
|
||||
});
|
||||
if (process.argv[1].endsWith("/scrap.ts")) {
|
||||
for (const path of process.argv.slice(2)) {
|
||||
await parseWarc(path);
|
||||
}
|
||||
}
|
||||
|
||||
export type Precio = typeof schema.precios.$inferInsert;
|
||||
export type Precioish = Omit<
|
||||
|
@ -44,12 +44,12 @@ export type Precioish = Omit<
|
|||
"fetchedAt" | "url" | "id" | "warcRecordId" | "parserVersion"
|
||||
>;
|
||||
|
||||
async function storePrecioPoint(point: Precio) {
|
||||
await db.insert(schema.precios).values(point);
|
||||
}
|
||||
|
||||
async function parseWarc(path: string) {
|
||||
export async function parseWarc(path: string) {
|
||||
// const warc = createReadStream(path);
|
||||
let progress: {
|
||||
done: number;
|
||||
errors: { error: any; warcRecordId: string; path: string }[];
|
||||
} = { done: 0, errors: [] };
|
||||
|
||||
const warc = Bun.spawn(["zstd", "-do", "/dev/stdout", path], {
|
||||
stderr: "ignore",
|
||||
|
@ -89,13 +89,16 @@ async function parseWarc(path: string) {
|
|||
parserVersion: PARSER_VERSION,
|
||||
};
|
||||
|
||||
if (ish) await storePrecioPoint(p);
|
||||
await db.insert(schema.precios).values(p);
|
||||
|
||||
// console.log(product);
|
||||
progress.done++;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
progress.errors++;
|
||||
console.error({ path, warcRecordId, error });
|
||||
progress.errors.push({
|
||||
path,
|
||||
warcRecordId,
|
||||
error,
|
||||
});
|
||||
|
||||
if (DEBUG) {
|
||||
const urlHash = createHash("md5")
|
||||
|
@ -105,9 +108,9 @@ async function parseWarc(path: string) {
|
|||
await writeFile(output, html);
|
||||
console.error(`wrote html to ${output}`);
|
||||
}
|
||||
} finally {
|
||||
console.debug(`done: ${progress.done}; errored: ${progress.errors}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
|
@ -2,26 +2,10 @@
|
|||
import type { Precio } from "db-datos/schema";
|
||||
// import dayjs from "dayjs";
|
||||
import ChartJs from "./ChartJs.svelte";
|
||||
import { hosts, colorBySupermercado } from "db-datos/supermercado";
|
||||
|
||||
export let precios: Precio[];
|
||||
|
||||
enum Supermercado {
|
||||
Dia = "Dia",
|
||||
Carrefour = "Carrefour",
|
||||
Coto = "Coto",
|
||||
}
|
||||
|
||||
const hosts: { [host: string]: Supermercado } = {
|
||||
"diaonline.supermercadosdia.com.ar": Supermercado.Dia,
|
||||
"www.carrefour.com.ar": Supermercado.Carrefour,
|
||||
"www.cotodigital3.com.ar": Supermercado.Coto,
|
||||
};
|
||||
const colorBySupermercado: { [supermercado in Supermercado]: string } = {
|
||||
[Supermercado.Dia]: "#d52b1e",
|
||||
[Supermercado.Carrefour]: "#19549d",
|
||||
[Supermercado.Coto]: "#e20025",
|
||||
};
|
||||
|
||||
$: datasets = precios
|
||||
.map((p) => new URL(p.url!).hostname)
|
||||
.filter(onlyUnique)
|
||||
|
|
Loading…
Reference in a new issue