From c75f8c335cc5b1c0b42bf03265b6c2053fb62b4f Mon Sep 17 00:00:00 2001 From: Nulo Date: Mon, 25 Dec 2023 02:59:57 -0300 Subject: [PATCH] =?UTF-8?q?Ponlo=20en=20autom=C3=A1tico,=20s=C3=A9=20mi=20?= =?UTF-8?q?fan=C3=A1tico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ¿Cómo se siente si rebotan los neumático'? A 150 aunque no haya prisa Y que solo sean testigos los parabrisa' --- .gitignore | 4 +- bun.lockb | Bin 172960 -> 157976 bytes data/samples/Carrefour.txt | 50 ++++++++ data/samples/Coto.txt | 250 +++++++++++++++++++++++++++++++++++++ data/samples/Dia.txt | 50 ++++++++ scraper/auto.ts | 225 +++++++++++++++++++++++++++++++++ scraper/package.json | 6 +- scraper/scrap.ts | 35 +++--- 8 files changed, 602 insertions(+), 18 deletions(-) create mode 100644 data/samples/Carrefour.txt create mode 100644 data/samples/Coto.txt create mode 100644 data/samples/Dia.txt create mode 100644 scraper/auto.ts diff --git a/.gitignore b/.gitignore index cc1df7b..86aaf67 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ node_modules/ scraper/debug/ scraper/x.tsv *.tmp -target/ \ No newline at end of file +target/ +.env +.env* \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index a9198d79eb397e73b76b07070b648aa0fc0bb702..4a0270defcaccbe97e0a125f533957d18a2313ac 100755 GIT binary patch literal 157976 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 xG}Ww delta 61907 zcmeFZXINCrwl3V=#73fuk|l_eqe^a6kes7{C^_e#fIy>yfQV@dh!Ic`K~N+chzf!U zL_`T9iUAY>F@OQSQ61LlefN6KJ@?%G-ScP9$2s46M^%j)RW)i<&DpGV;t8>!gX4&j z>{sQl^E=*r5gABVSg&j^*l(Qp@LH9i%Cp3$7nUW6X=d@BC*aW4cGP(lS)&n8Avjz_ zl&^Q7XF_;%U`${*$Ueip1cytRfdbrs7Ep^9a2}8oa0?SPKgKgk(JvZ@YX!~$atUS} zjt4Lm5Y^jB!@#fr->ATtXnx?RK06>6mPC*zpJ2t|h#-lG4UIs?^gs)!rguR2uCOQ^ zZVEWk%+3xq0Kc)}aLWKM0!QVdyiqM2P6?DCd1zo*U}#`;3;;zg1#;Aruy7w=MNhB5 zXy4GCzM!`pltLCcCEhb61j^$^XkBasM2fBgqOM#3L<+nD!+Zk6{G;Q*el!%dFf{yt z!eAB3-vNla=HnS31S5j$hkGS(?*PxJ7^R@-Ft8SNU}s>AFS5)p+IOdK7&#_7Dm)}4 z7WzH~T1BBiFQ5ouEsdW66a=0GC=R#-Pz+EHP!doKa24PpSc`BJ5aqYhcrhT-mjx&c z7!e*F;~gE1n*!^($RKzN2{goEo?+pEJ~*6jv{!6kh!3t#0Eb%&@(X}yM2-M12TZ2P zgJ|5DmcNB2SEb2?0arkIHX5IX;XorY01qVZ03;*DRggf63jtAs*)+Zj5Eb+RMCGgj z(U9xV@}+6{d^ElYg;D*7FubTkG0`D`UXX5u8%5{B_a1!Dqy!vg){aZEJM4T$DW9xCzy`iF#jq4J-lsO6E)0`^hKFGnj zQogUI`jELa)md9<@-g5rYbpKGF#bq!_Zn)2^MJ_m-D{~B0US9Mrwn!I@PNp`b&!wn z8*o(LP?lQ$f2W6DKT(cq&^j_r(RHv4S#(C8s`wZUcLfA`2S86@-NYfcU9CXv(GNh> zaD-<}fMT$3yd;ba>hTgln2i)QC92b|1Vm1E5)jD=fM^P%e51odcKYJTpOvXzI|hh) z{tS>CFu*e!0ssytqe^WkSDdN>s}QOGyqJwrnvi8BOU+osEFpi7Sf!6(K~%ZP>dpws0s)4sB#nFXwDx3NBEs4e+P)_!_+9o zMEUxL`h+R^c*b~oqmUcr>jQ}>m`Pj{ltWYC;~N?436oU=oQ#ID020V4WB`$c9#9zd zcyJT7VOayJA<^Mc-o8=sxMoGEc7%-xyo$I`bN`lRb6s&;~?%hA`kNzy&+%-t-bs9C$43h2Ag*sg6`%?4q?> z4~XlF*$hYLj=hAR*9!7g%&93)W3R!{{gySGve z4gy53!3J_3zt7XveziO}g3>`ony$1+EKBd(IMjV_gh2%+%M@4{W zDF4^hwhwk5Gy)Y+0mZE%nu0VyQQ-8*8weatVQ63|#b@b@;gu!k%C<&Q6NJb`-C^Az zk2nvAxNr1&Mc=p>oR~jW#I}ZP3u5Hqp}wKvfeF68^{^SBVikZCM*>71p96@>1$c%9 zfnVT$!UN@h1Vq--mnPkcZki+0_YDX~A;D0u1LR2mH9*)e$SEoz)VTkzo#_ASJcC30 z-yTX%Lr>5=*@CO1o*f6|0)+ixSAb^>&H;LjM(%VBb)=30BF9Jr^Nw>|4O8GC|*@F3@B~_IMO!=hMDkLaJi;>=n#JLcgJM)J9S|ADyoYK4 zJ&HvrhI&Hu$6*C{0kY9v>iGMH#lTMP8|@Pw8XFTB65R`O)cd=D+<=z*sHhDbO%LpT z;h~^Jg;wriDz#Cs@bC~XICY}k5luMsl(Jg_P;K^29H`aYTki&WZq?Y%oTqU!Bl)&KClGt=xYLcCuoHC0H zb0DuV@n>B9k-aO^K4-kN2^louxwz?QM%1ab!x^SrJg<9H6@K6UEt+7Bf1B8sqR(dQ z7nRZJqp`MJQ|(u`(YsC3?B5Iw?_?eRbGlB7Z$fi=w>39!dQX)!v%AWNG_7T-xi%|vQT|- zbt0C+*NoZlvXjqArzps$`Fa_h8!jzcd2`Net}}#X>byhk-H0WpEcv4*Y`u5eWXU9x zKYxtZHCu7+iQUt*nXRz~EI)k4Cf;PKe3`v6Ub3Sl`{MUFAA9b0F1yTU6=GY>I1&a| z@jmcYjQ4ZS{w(BTwIz*rTS!PM{&Y0!ktFXE+Huo&k|Iv`Kfw25D$4{+nuVlUZ|?AT zRT94tu3jL#>1^q-k1P0}q&fC}TAdKi>mn*SD%DJsY;eV&9yI!KF5*uJ{#t~j;lPz} z)#{MX-e*7gxH=B&HXCBooC4(kT_t*9m-Y>I6K3cl7wQ`16S8cPwM6IGL_I^Yk-kW+%?(U8#QWl&oXd zbDS9+NM(DYes=#&gOWeo#j5%jq!ah?34JYIdYW*|?+9Jqq;P6L$5Fs+=WDZG6{~D_ zp4D3%^m7!pJ>;}}>RK};o6aVC*7E%IOFFAewkI4jGtcrlUU_SvbEIjnPgU7TbFyd zx6QMa6j5KQDc!yLjGTw4lxcsItZX>H#ygWoB8QUoA4i(Lvmn#w z&F^Jf=Jo5PY9X9AW3QTYcO^ZXAL1U7%1AQZbbN@plvC5J>$BP^p}5O)2_fIehs<}- z7uDVS6E(>@EFxDCUT?Sk{5is<=`+jemyRf&wf8r`Bvvs-%)=ReYpiQ>G1PQ?J-vovi+RtlQUs`{g!P%D=Snt zXx)|=s(V>m#^Y^wvEb93*D!gT)HOjXXaj5LvqV&!ywF?H;4Vk za8R;Xbz}}U$E$*=@Cjfxd@7jD@_OvrQV&dgnE+<8>|T}la&|oVyW+JJn|H&zlGKz| zwJu|lG;ZFWx0_!+O8uC3Ld%(gr0^4ud6F|M@@%FGFS*`J-1a-9?T@8f+>SbdyF=aG z3u7O3JUu(rtcYE#vbW7u_I%y_$^T)-(vOlkMdw#~-eSspTiACZf%|*&QK@hG_7P`U zob~n|bZ;>4GJMvSKh`ARdDZl2&EU(PeUriuq%W5&5j*lB4rivuxpgqEt+?}s&tayh z4cFE0bmPhskG8n7HH)7qFAR3R??{@t^{4PIoA33}tjrf!`<${p)_Y-0)qaxYBdPh^ z+T?~$?`*NVV-ssggk#K@+*%Ux88dt;fIK`FDWX9XV!`1w zsr4i@h<3m>Qu1cRGziC7FgY0#%To}lV2WZoEX=IX2&TAJho}iD1t`djMT%+=d{{9# zSrV}jgd3=}1vCi#tXQcmiG`01)t(g7A#7s9H7{ zINWARZN!{`!7)CC6$49Hs(=|{p`tp3AM9AEJc+mo4mBv7fU2?_2BwLX%j*z2h**#U ziRBvzNZ6#b4nds*n@}JT;yExmMG~ zk5@-?LA(Xjh|<=Kqy~`yCmuBH(DGUh;znR-_+T(0F9R5wCp=O}=;p+Nlu3j&Tv#bU zFc&tVOyau&=NmLna8gAFJRAq+DX^B(%qz%&cSocOW?};zw2)#LU_A}uZeYl69HuI& z!Pg8-6&TD5<@!qpftLrHP$6+S!&wqF0yB*x!VJly2Dmuk{N?&jQa_Mx{U>STKb0*I zBXYt^ncY7X4FajhKS{ely6qpN1*?gi@EYm!4?<+u0g!J0C+Ua3l^Vg}_aD_F4MiaR zM-2tmL{9#{>)2M1qEY^bq2a3lDSWI-0XM^;9C7-ru>6Lc%@mg>t)O}mk~#}1YVMoAWC}v`a?y~Y=GH@sS_2Q? zMl30Htsq5}FfEk$^E_s$v>kPsOQ22$2UT z1;a=2IX)YBwX%gWAjBb;=b{fRu@G`LKn^&#qXw}b7>XwZtPMDc43Tti;Fda$_2x`Pzz_fu8F|_Pir0GEb0uI4N8ii7>Gay7o2%r?Klcw~U_!Xqc zCL9*I3KsGjY8iG)y!c6DY?KJ0zZR1dA`#Qp(gzvoZdr>>2$EQ&WWZ5T+$6?B3XL;6 zrB0m;79>I<5@e~3Py!&qN*0>{;QVcuj#39e)GgkuFM+}WL+{@{H zM5t84f-FfyW@Tz|swyjBs6p@qaSg6>z|iVObH4(Mw3f#TB#7)P@Iw@}2-p-2Ocx9F z*5SGesVyK!bISFXqkIJ^im2fE(4Y0H)WN5y=i3F$8S+@62D<+8ahB(h16v*RloN)= z5S76y#WmT1SOI~34~FV2FwhRFBS{*BM{3xF7>UTPPMtgI)@Tb1c@$-`i5M_sArEDi zztc*BEnt}%7)etGtHTSJ4W%JC2C!TQ2Ad-6JJNrWdK9#C0eoAgVcoL3#TB3x&g+KG+26pX63^lAVmEF)et7`07LTvRbf8ofT7W0K_^U>b!~|eyJ%DFIOt}jTMKhR0IAU_aB7%8DU4S5A49pnifi~zVX!9^4 zvV#!y1kPO$nV)XKf*eUiPVf&HSkMA1j>`cU#U`i+j!4@BGH7K$H%Wu99TxhwpD8fpp{NMD{yNtY$&iD(0Zm$H5U&EG`Xch!VPG2}4lKc&MgEx@!XPV);=79gh%q>U+cAW)kSVjw=EWAAa0B5NQ3i)#?OfKf*R zEoxSn#_cE%E|@=Bjb?NDIzRz@4wwU!LBp#IZ#O1{EDNkug+#myEpLPjh;2}e-;zEj zFq#B+ORQ9bL>LDUAQ4oounAyJ)|i|oi8ulq0NPI-=j#!W`iHJGkaIj3Fc^D*OH!$R1 z;7zdqayVfVP{hmWFXs{0AQU)ZL3$*XF%W7~mWY@$)kv5a=%bS}7DOTuGe8JCD5!;* zAXGbJ6C@JLGzdwQgQ?P1>eN815ERpB3|s}ala{TR+(r_S#f82BqYz^b%n>*`Jk)4JVHFxwcnVcKFTqLC6xM-lu3<+w5MMzmv zs#NZIUp@eErEXbV1 zg7boZ6Xx*x?1jl$kciJgPTNyqzm)-%MR0gj73mA$9;BwL$1dTwf)E>GK$XLAr z7+S4R9d;t-AZi7$7}!Q&5E3B*pg^%77&4G@Y9-VLVR8^;r$J}}LWpXxqihPMwhk|| zz;**esww*mv7DAiIhYXM2V)aXB%*N$_ync8Dy+RDAy|+ziRB&$Vb6EgVc`lzUW8H( zkTRvD&OnNq`}!}Ld>FkP`Wc^^TL&p>4O}>KH>AZ9QdC(kq^v2jw}0iTMbNdxLyB6i z6;f1vY>{-C4Wy|0&OnN4-x#FKDf*P7=;h)dMJ;!iE+cS9V{+~!7T0KcBq@Xx3jHvE z!kYMKY{H$yCl^DNap0)0x#)02{rFG@IcP?x!F~o92^fURjT+08W5F0;XlF#%`OZ%G zU?olYrmz$8(9XsT@)h7jl&ypB7f2!a{Z-?y6EV?cC&L!OcNCZblp|2|!jDRHdzL`#5@tpV_X#RR~NE z@=#N7au%U(a#J8x11WeS97!bNscr`SCTS4efPojHunQ}F2$&{?q4!m_1p1PZJ&F2qG!yRfgb{g2}BS5z;KjU4sWGZh$`8tSWZ+a4@Pf<*YS2P*}z-HS~~kcjDfseTHt=ny!E_hLbk zBo_XC$N==M&}|_Q# z10nAjFl~yKN=r@lH0p#?=f;G_&?yd`bl6$=V1{|AUl0*R6VCS^9~4udJepbRAU{aM zCd5fZ*8S9hVaelD#jBH19dz@OGO!OPPld8Mt%iGQZ9tdaBqYg)!hO& z6WkC-DHlRi9s(ofVnif2gBu|n++Y%^35o(MNTY^rkPt3LL~>ZEl#3Bj!w>@~7eb^M z)+Xgbhzxb5(!W7!`;-h+(G6~d+i2(xh_3$%qIz&tpj-$M-$6qUKy-Ofo>W8~@JcSrT=my|D9qqq_lzgTU-hGxio|RFOmGOQuN={1KmVDSONDH zxY^*Yf*W0oh(@FqZZuVOG^__i*WV#p6}RC=bKC?sx)>4ZX@(n*hPef9bRk3)+7N*Y zAuHUSa3cdAz>O+Cgd1H5k-QrbxEK+Y>wz2L6S&cZ5S8zP8_A!+joPOqP{s>H;QBj6 zh7D43sffzIgc~Uup~(><{))!`4pF@~a3g(haX8E%Q4r6BB_*yTqnhJzBb+cYiU!>$x5pkphIRy)aP!T0r;epzNA2q2B5orYwqKqYgNW@8#|7XY!<(AXR^V4tz ztsX+8Pk_c5kqB}LH2z$WPy$4gqzZ`2s-XuBQBs{IUq_Q8M2a`iI6~A@9U4c7lDagG z5GD2Cf$Hf4@&b~rA%W(~9uWTF9MFS?NWPVpzl|nGh?4H`K+D9NCP#>pKJY*d_|fDD z5f7kogeVzEls3n9H((cM4|~={zpJGa+5Uv8D+wS z5GAM3`bQ0Xp$TS@6fT4)`IW{IBA=KCL<)b=30f|^pgkt}0K-AN{G{yfJA_LNB zCHJWI!%~w*GTLfGo@hL<&yQ z3L-@EGc?YKNMRAJ{CQeFBccW_fgE8OASzN$D@RAlNf0SQ_y5GpAQ|2UDHlT2Q!BWU zk&G{aKq(x_?GS;B5mCMW=F1@YAKnhp(Eq=E8HD-wf<{rp-f*J};s3LjLF9k`lP`l5 z|IbC;hUR-`%Ms5VhV%;v=RUNP4MsD08uQR=J+L8;00&w1F(m{xG=$s&e)0L@PDPbXpZN>I)RzwaAAtY=6F6V zzStR?12zn7876zl87s-|#KmZj!+Q7pgI8520kh5Z4x3NtNp#_ji=28y*19ltOT8vl${W}Bwt1!pQVhzAF&qDvMn&aiMz^l+dU=M*Q zVuIJ8f9JT!jVdA!$3IyyZ!1ydlQ%s2B3k9zj!ComsoaH}2>1Px0@~(cYMNQ(12^US zcss9^WZV>ms`5x3Z?|PAB$b zdIbXHC5^lqPBSg;;m>E34hbGO_-=Qmfo5BQQ&s4LT?;3*a_#b%)Z-+Xgxkh-GhtBn4cIrJfiZk;OKG(hI$k0P;ANy4tDCd2t-;u@uxgAVAuWi?YE zgsH_YG0d;kn*P+W{epyG1T3B}5+{8N z@*mER#d02Zoi6--y0Iydll{Z8GkcPrO>Z8`T4j|d&zkkye(j0#8=@*>GLt!ry*UcB zEZIc^uv;DIeHmGYzICW$@s;34g@S^g7MG`*n73^+4+44vJD7JNlhsJ>2w*xh{37 zaXr`EsGve9XNC+<$=!Tm;#o0a&R0aSlrtPzO4#Xh;r<g)96&-gsXbcD? z#oHW=6Jd%Fv%3f8|YdAnU6Ke^M2Jn`}qFJrqL`O1-`9+0?T#wijr&aJH3y7 zTqmAN65k^f;ZQf|c%y5GSs*hpEB4;AJdM(C?6Q|bY?+E_dQ$*3(6>$c#jGzGV%C1{ zke7rLYerw5_vdgtTj#;3O|I#`-HP+A!X-vB6T2b~IcRO^x%b}Ktzq_+wgtzh`=_^0 zjise0L|pR#MaW<@yzrMOe_hP-Qj6hh^KSMfCpVnZRb?l|6CU9O(Og4 z%f49H7^?9(D7oq4(L0MKey*#$hu!wat|uFbmto4^#7zrgmcAbg< zU+24Zg9%Z&t3#AT-`S-rX3evu91|7t#|>0F=J0OwC+J1ahDf(QPPI8F_NLJZ|1>pc zorHc-$b2-?ONKAZDUg7_tN80;zGt;GiKYb0@r(Fu{WPnhW3T!)zd0^>MHHG^1Z*GS8Y86!k zyb?})e_Q-0^=Dh^hOWz~cw$zRoaJWDFLFkwp<$4|%ZjgJ$uVmN$@k|prQaT)SjjpYA92f(bm2L^`S+Ekq=1-X-q9}} zHkhmyv+gb8_Y@~TKBHV5v9{xnQ7rp`k@MtUx9Z8PkJmrelpn2Jy;kcPO)>Jgjf{%d z4Ct+Je{Rs5RjKla70W2JPee?liqL z#%)dCKOAMUvJ+;z7cqPEmRWD=hsL=rIDUtP-~`gOJ5oXS+IvO?d6LUsK6HBA_Rw&q&s86L&r;s=YJ2}cg97`yvviT@#rh0Ucs-zhI9 z7-ybGw2?ADt6oN25;5zaZ^a#Vw%o3!kOvdJBw*3^yPzWV{_)*6K5EvEyDsBiR5K!0 z^LL0v-B&#SMxycz({I(>fzDgYnx)*T9Ns$G8@)8TTbKW?AZ$%j`n}rK*_5%PZhBj= z_zu{CFTwtQ-5hU>y}0g-H^Ee^objeuCOplsQFxkTTGh^Y3+yO7EwOQUT49@NoblFJ zK0Ix(8F<=arnSy^JFF0%_Sif;9WdKEXS^eJ8J|l7mV28jCaL6 z;pv7oz;heMcf%R)js@O;v&1#7Jkh0ibNmjhvJDOs*Eq?{PBQ9Ufv;CJj-A$XzbZX= ze|d7;%=_9Wtb#8*XdP(Y0s?`kL z_GFxtX`?=F`P&&I@A(u|;}r~KCq-}Uc75u7QSALYQ|TEMy{f@q7Jf&_4~oBa3w4l! zR7++RD?Ck$?p`=*`?#Bwx=w&Wu@|Fa@9$-|8x|^V{a7t|@vG8mhyLCq+1dq9*)fNz zF>^r^CL=vrn~LKmV~==bb`-CP)EZDf^uyr2-dYX2+k=*z>rxo>dZRz#qF>CFMW0sH zob}xInkUSh`*qKj!>@l84(J{DDQtiI`0$^ip)pfkv$OAdzAc|ICwF0I6rOQqTHzyH zaNS+`o8Ny;_rpZ53y>c_G+Ouh{h58t`zs5-)?GijM|1wbSJz~Vh$umoifu`_i*w!m zz4r-zEFwP^4vNLymIzK$3UwKZY27|q^=&rc1%q|Ibjtvl4To%2{mhvCwX2rDlZQ>A z#-RS;M9Ig)$L}v*S?{o^Bkle3w+mY50?7IwGEese725^}`#Cti-fLQ3;uuh8ot1Nf zL9rjB;w?^g65CCL-Py2Rmx=~PoAj1_8@~}P(W10z(StQi?owi!AV=ETR)KV$=NARK z4Q9>^HLnxQ&fWG*pY_6g{dP2f^wX68KkU?#=I>-LI~ff}>{a__R9RUl>9lAlxIDe! z;^;@;7p#-K_(xNW(^u5(IfLQ=MuV@MShhKS z`RSyPl{{+J7wzm5+g{!+zF8)inkD9am+U;}6E?Jv_Q|brb@vDNdFiE2_oZcrh8%fC zo$Dj5JP*IxhJJ6MTO7!!cuF=Z=cAy(Y~SGXQC_WGwsRlGbAF}BWnMkHTeox~dU$H` z_mi&RSk}|b_MOePyLHQSr%G46Nv*K)<33n7Glsry!%j_&06~n3lPa`-4t^t8F4rx$ z*HIq#yRH_}8~Q5Z>ZJH=+uGM!`N}?(!iU;@Rxg|6j15UUF&N)0gY(%tXdtDa+Em(j z^E-pV!HjySkn`di|fSiQmw$O|h?dz_$+)O`Q*lL}pnfA+9; zIB4b?vHj5eKHOZ|-rph7*PHg9yf8C`0t9R4F**5MwC%Vu6=8jy!U+*Hi z%7WGITdhk?`^j1(G!S&-qZsx6a`egW{rYjot9bd;A+6}wn4yLQI<3_7#W6{9_pelhFZ8_F*34{|;v z+}+*#iqG9|ljZ#5QSXgqIz_81-sT;`o#H#t^kt`d>f^%#&quUch`(C4ZTlP*8rm|H z)>#?Ei+;SLD~`ctjyvOHG1X(v_?=iLJa=I)jymJxuu(|IV_KLqJ^?e$amMe)3gMZE z&F45Z-zs?W@wCJv{(^POj)&j7Z70uMSp7ln#o04*P4zx#Lg`)lkGBdi z?i{B3KCdg>=SpI$&oT%DmNy{2k-zTmN)NnC%hGID3}lE+{G^6)wEF$5YTf zE3T#a=c8)ol`dl-jKc?VO#sghUtqoYUXpPKYkoT->Eqp*gbGWK>zYHg_~5Z8UXDmCc8DI-Ra$tgdO|}W`2F>=bfM3Z6I&Uq+s9~K$jd)p@H;kmG@3Wim(OJu*DoeOTUV2@i9o|USkr9P)()^`IFy)8htXx(QQ zrMSCzBs~9FQw=$?X#L0D^u52O!fWDOjgQ~1=H011U+z^Zvh{#V(@4Z8{G39I^~5Px zoi}sqBaAv_B^j(sW3(<@H@|O6x2?A(kurdQGjfiXrXk@_jF;qsNkz_cuzwqVGlO`;^f=cefCF{ zkBnUL-s9+GB`{Z7G-%NfG$}7Nz3Q92x#>OvQbygE$3OXPQgvG7v{>#`WFE7CfvVRq)1qEwZtV&Ng(s|GL2@*-4B z*^f(AjC1dJTVxx$>WH=R+jFhiqcHes9IYPtG}ZOAbd* z9F<6_TCVi9P)_d#<3fSgg8zs!%p&!6TVMBNJ(_={`9S#R!iGOG#Bik(eqUMf5}irI zTuCqYv4*m>O(@09j;uXXcPHMgJNV%}%>W_)^t-sPdYcLv3_iqYuyN~<-rM{l_bTJg z;#E=GWx02C`Vb~xWBex&huX>iTczzxOkrdflU@y-Kzcqxw4_A2VwWQzc~;Nn?bg`kTs z(~jS4cXo8>6&pMm1l=qujS6sm-NBnX*cjCsmu^l}ANm=I67cRGt zXRiPFAmcuRsTiYiMZ+u3#N1A1^GQh;)BAi>GIz)!osK6Z-2KUNrbo0?Wrb6L3cv{|tiJJTvaR#1!9vt{P}ntcDT`j3cpe8Xz) zO|m$V{jP_{-tHIm;@CR)C-vIL)z?l=e6~+-zg6Zi{w+cEMgd1+knkf3-0vy|>v9;a zOHH_U=zBA4Wd0 z^fg~NtTSF4rDtHyV_#8}hgr4>kZ+rX$~ugTpV$_ywkM4EWL|h%!#@1%1lNNvwZ9W~ zrCpw#&cBS;@HDv9B7dXBTdyaqT>JdEt@-B-+AjiptLi_5KjhdMze6xX_ zsx!4F*dMTt?_#Xb_BA$J;$oj0oL!u$C4K7Pn7-RzF4}ioC}z&#_^My&G4B>GitZ1d ze!2Ull}k6j*Y!s&+$*0|U#R=p(R`V~x_n0K{%ly3zSq_7?!SI5Yhk0shQYPfz3T&{ z9Ju8+{n1kK*&4-ts;B?ye^a0DpGnF!Ka!1=uraopl4K~(vxkljGNnilHUPWbE(l2Hmw(#F>yCu~NPR&)f z&l>pKeKcgUP5Pu69u&MXI#-o2qxh>XRGCH4iT6sm_(Azh+xNwKomW$=gqB@U!S2Xj zhW`;)hXA?ZxdQ(1Ijh}MpEv6SUU4g9$qwJhmLV#~Jf)|1?C`PFcLE;3LwhsQz{3+Yy;hLNal+W{rzHJ{>Ci3ft_P?kf zOSzP}sJ^u>zTj*Ad&9NO9bM$Pq&H33y1O!_7q5lZF1X%RGRa6-5@>H6&!G4Mqv9>H ze^y@QIY>4xeGytIJK>?|yglvgSAoy(Cu@dRB}Vj=*Ocg$4W(%54u^GJm8cll5ayIL z?Xn{0#8toC3R5R02E7;IKagqbc633X^XV5e=YvMRmCSBIxBR_7%zHcEgns1Y?pjy9Rjo_xZ>i3 z%i}79tkmvp56Tf)$VhX#c{cUM&;25<{f`Z~?3T7Hc6OD1HU3y+CdklgIiubb*A$7H z2ky(uEJoIr3LJX=M*I2-ZQj{MV{5hIBOAV4KW!GQnaC2+I<_^f(&TNlrl^MgRB~-~ zZ29&1!jCsv+y5{quD}F)obgw&$R20%HO5AEh_Fu^6gsl6xKy%Fd2;YclQua$0iRrD zY85X!9oN~N+7Q(reRP}Wn~IUE`fH|=pTE5n$;DKyfZP2?iEMF>_l!mN@awaCswDZZFPd&{UKYBpbh@zT!Yy{u z8ef}d<#$JF(C-HHxwy`#_)A6KQYNC?-o%=YK7D2J-rj8ntnT4>!_t*aF8MN2n(r55 z+If~(5wo0yc{OzITR+NEXBU6f^ya(%>FSf@<6K68|&PczQ3p|qT1wCBu z@gC!pnf7NEW-BgK4IQ%M{#HB?B6w1m(eYZBGk;UH?Rwqnx4I)T1>~W6TYJeHL%)|- zPn8z%rhkx9bc{cllchBxr*K6tb@UHgdTo?~2ZQ2TM#c6oI%eDJk{-W2A`zQs{Z!vh z=DK{w;nky`dBff9*}Pb`B?eEZZZ1BmPUfxd<$J<+ zKO2UxX!Nk271q_i9W^g`z`WSmb&t5x`@`+s9|Ubo(kBB&SUqoIo~f1 zn@#$gG52l(i+#dT$>+sCd0kHN&g9<4(}3%8Qb=H#lkIvmQFXs-ZySxH*@ z{^RUk=EkHWzL7unw2>X0#~v>UZtyvJ(ymO=XIaMQoCh~0Z;O@o`kqkm-YEE_?RoOPySTGgQHs9;v| z_1KH|1^*loe$5jSy!xwZ;&{gzZ{u*a*on?nE7y2n55c-yB}ZnKhaTHu{j+JI@croE zk-B7&Q^haXWY*Y`oL6R?svLN-<^9o1OZ8ful5y_{=gNAWTw*`AZ)$0=f0~#ibBV#a z4o2&m5=QI3ymGuR>RbNk`M{OAUYX{q%DC~HOv=f>nQfl$C|#PuwWX^}@F1(1z_9YH z?D2$WMtjY6eyDygNb2a}&?8|X(4T{EnC;w!+;IGRxDNQ(b#}X>C7+;n;8LgY-=SYfMs?w=m zR~)uI=;VcuWeVPpli7df4IcGxuocP-$1G~Q(nSPEjtxgI-8=SGaA(p!wUQD%S9YPl zyv60>2~4pMUhD+}6IUDwSnM6&ny4~$=W@+nZM``dZ@-RC~? zy!n3U(Y)NIx3ek7u4{=-aP4Eiqhq!O?Q!%Vfh?t8%%-8cS|7D!U&@>~+xH3AzRS3?l&F3MP{@gu$+=R*tFfvGSsE9=d<;@vZ+4zFPrnKOL+2% zubq_r*0$$f?vAQ^TNzKS59y`>G7FaG!f(y5%@>8AFgM&i79o-(ykqK`lZ&)LW3}E5 z_1474QPSAMc}_H=mW*z)CfvW`6E#j>9XSbQ#WD#f=OQ0^kbbj#`-hkO;rdhk%^fX%9P&m_w%)k(rtU14Q>> znFdEy`*^cDK4Z;;E0soTmYQfS9UslyC2cBrs^+8zw;{2B=?9_Z1&NvOQ!!I+nq&J) zc5Jd=fE;e{wG!*9lfNZqd=x)j+MWJ%%dtkYPn_A=4%<8&25-p{R!?svNSB?>2-(-z z^+JEmx|+m0v7_%Bw({@Wd_zvcC9hBRG_>{^ZU}L`y)bUPvMXYK$-H zoHi4TJ1VebA>@Rm)H>_vm{kv1qpxkdRLNW018@E>1jso>_Q6qZ^A55BO8Y8DM_1N4 zI~DdOVy%W7Qp47gcUBedmG|&6Z_4>-VRt@nMOsd;8oO=%cuZ3H&u3Dj)tp-xtm|jA zPU`uzT9S^r^1bE{KOVa9AF#}{nv)HdW%4m8P`(iPVZ=P-!L=5{gMxK@%YHRD7O36d z6W^2|H#0s6IT=Y;^kq+(wW`Sf zNHOioygRbMp6^f}!xx*h_iImDP*9`X`KaaqAuEwps~D_%!D!t}#~@a@U#_qBi3D{S zYAyDq*I^va0qO^@ueR=IOK8n?dS61^-##w*R_MqD?o8p?h2kx*AIq%0>TG6wf7az< zNFr7~AVA)7J$^weEuwdG#QOO2{n+WHoxgXhySVdA?HrnOo;#!bagF|oK&1>}nM2B3 z0$9=(@*KbgR{lzL|6Z3gQG8Levw7z`-l7}m2gbq#%({4nqQltDs@(38{} z2XCWyRoP#Du!(J#%GMKfJYJg8y)bIve@d+{X7105Leq6W_xQNIe1o|U3Xo4b#5}m+ z@FL};v4{-&sr%#Rt*gAY+;cQ(V!nSZ{rl4;>BsM{X4>j$`GTb6M64d)S~vJ}=Pz|0 z4X_|0znfiJo3m)CvD-!&j9C408f z;JD@v!POtL4nIBjBiGtNWqHE2k)_tUD)WbT*AO;iTthIkHxgbh_af-7U#F_l=6EwJ zd4Ww*Udy||of-G=OrKWkSKXmgt$FX9XJg*0ZhXwFXRDAJnOr_>&?ui<%EFYvII|;+ z)@8^a7E$%M68mda@Exgz$V+-U4<%Z94aaYA6y|3+o@l%Ae#aV)F$=+hcPu$Q_&k&K zvp3J3*KieMIS{$W?W61d4D9xhfW;rVsnJ1|PNq%C8Ag}%1IG9N5Y~HAzHx#%IoRrh zk#TKdtR!`O{tm*2o?Y8XCyj+tA& zVYGGm;^i6MM6IAL!}~XJRL$@0W;zL9=fpOuG%Va6N}2mz$)Vj^Wx3|Cw9KRX+#|bG zxW;}o_nc8)8n3?iytJozEhhR>fNV06L=w7Mn*64Ei>jW#Q&P~9Q}R0->3mTDRgNH-o8f8I5z8GOk;^JS?@_ z|J={%BT}nCz3d{ zL=QJbd>0EEeX4bROz^-^m%C|&kKpAz@eiB#>@;=gsdV1)oIutYKPN4=zv^B+mNX(j zzI%BWG3VQMSA8r+wpk)r)P|7N-%@h6?`Mbv>-}?!cHFYpqIySIcCX3}Ua(PnH{Cm6 z=l|;#-(enCwySIIjz49v4t?{dU(9v7pN`%h6mFgJ@Z7TC(OX>p=E9*PKiD)BO!ow_ zhs|khzTOebf0;}0)5>*e_I}GGO8aiq8L^EKZx7`Y#@Ef36<~_5;G^t2fi%`e9tXU< z)>PW2nedK*cGqdU#E>`@VZvFhPnIeQ&r4oZ9g~ZD&b>@(J|m^9Jn~9Q;bv>ADL13#PuZ7qO&zgpFWaNU)HFa8WZu#Q~Q^FtX-aU%yfBQM#=5Ecg=p;$t1zDRTekqL*B`MS!b}V zPE7kQp?mnk=Vdn)0!RPJ&SKNDmHI;mE!`v$(VgnUH z1Vs>gkS_MRHdN46uxo$-kx)zkMbThe+q#yhV@I&8eMMKXcU^n$y?3$q_WsV?8xj!z z@AG}n^F1H>%iNhWbLLDtbEf3RNArB>qSj)A5*sWgFYdOn$?4F;=e{+0x6Y$T?tixy zA9Nr1KKpW&GQZbaGN6)S!*%nzdtol!=A) zl-zx~|AX*nIqNIbz2tw_rRB6Ii)PIFQD<<>q;ZK)){Nh7QQh}_;|p#7IePqMvwN#^ z9_Rks?NVS&{lPso2hHm4mAQ0xJCy2pvRhjGT&viL2ZL{oPyMu@j9pl>GeM*3JPq`1 z_(Q*3aj#ZJLdDxp+jQF7yKMjChr1Pf)@8=?o9z6fIuAFvTsAz1bRS%vUpPK$^0qaX zt*3l^UcL0v!RZ^%4jZtjO}8SW9@bpiv;5#vTeGdV+{k!xXVt;|d-s(3)GT@b`G@PA zegt@(yqs3fOu9Gb(p^-LbY58_T(&uH+$%J*pCCa;9YXSxJ$e*eM{wn4Et z;g1OwV@G$|@pS3K%9U4kN#6S?zHMad8EfCQ`7|@uu;8v^#}^LAqOQ3L%45Op=I9O` zzw_6Y6IQ!h>HoT^8rpkn*xJPjwFf<%{^wNd0rP6z_vy1NC~l-*xLub8D>4pzvaD2b zyZKT0J0?`Xt+{DT3C!eD*Bl))c2>^>Rx;C9<)_!LuvgfE7Q+i;8i z0q*H<3lhE=4sQz+z8k7;4-c>;yyCy`f@R!LSleIl& zLys4@r@uc)bPx<%;kABQ%8+~@NUSIr_8tf|Y=+n4V31fzFlY~k8e(3RGMtCkMKHMi z7iw^Pjc*_P7bI3e!48Frt|%Csswfy7Hx%q}sOXM@!KsFV!SO)Bj)aQUQ7||)P%t<( z1w+fDp<*qR3r=m63r-!B>sY8*7X^Z&K!MqM_ z28q83hJjZ@4VU0O4sTn*;B+l?=6HOgWB9cou{|2=S||$?;8$D^5`zT8(CeY>5&5sf z-wE}3Bb3b+;h%gXNDM}e!r!h4{7r5KiCs{to1yF@`Jco8JBoEHlr6V}f5ELFu{+8I ze~+T@ce))UhM{1$Lz%S|{NLd3iIUw3Wt+*r=1!2<8%2XZrWpKv?*@r|QMP-b%+VVD z9ruF7{wUo2P7uqyPNk73}Droy&BkQ z?2YLYGK68zqOSEB*?!cZd*Sn!+HSC_e7ee%w<#%2X`j(Jk@B~3$&4-Iu2lOr?1<~+ zhh67*Ea*4oigTRTmA&z!7YoPqBexX4P`2FGr_&PGxOX`aoW63N&-UC&=}~3Y8%E5^ zZRvR}@Xxm${LC1qn+qJZ`{w@K5o;`SN$heC&7tfrqZ&0fzjXeSm@ATX3dr~{hd|P*``!|sXxl6CWZ~@^I_k=Cw@#j)S^+!$L=vz%e_gT^zwY}x$A#~-;Ju?B1+M} z$g9j$Gl55$^F7_pdF|WkmW?hucUhopo4H!=-Y&L*+lx=#nx$6Ds`vDIddk44-sMlW zznju!>Wqs;+jO{7Jp184(^m$M2t66KXZ~>WjnmQQj1N3G`KH_C#4nSVy!o)L{;YEs z9QIFs`k$N5VQ8x-dp`cz`O(+0-+P@~u{XKf=d8LVzb-j_{r2o`jpkNpIR8r2nf{c|hW4v1*})HC4R>(#Z! zj;V8S)~6%s%PKrtGxhe0uM^j7YF+>OsQTUC*V>d35!)!jjQtK;dm|VW9{8uPUaU&CYtl@ zAUyZlT3h|_j|JBk?#KvyH*2@P_?DN=-Mm_l7?#t&=z#-|q9!J7De>>N2JOa7RXKc^ z71n6}u%Kc?7hfwqW#Nu6SF%ow0#7n$e7ARvm@i&CYJBZDv+Ar4#fv_+TW!&*kFU#; zE5Bd4_@CSN;#(c-Rn9s#rq#iXOKO~|IM2V@y=_g#42~3N)%R8C9OvgV*S0X@JK3D?jRUncdz@cv)IV8zw)3-Y+BV~xrp7%UcYAj6&EHr5 zvo@ky$89C-k9IgVp?7e`z2Y-66MFo3*JNU^Wy@-u`ftfQ_>oJ> zdv^#Hllm>GNSCgSRXoLX8bzO4D@!d?-y{x{k|LSgNztCg(%8jeqG*7mkzvp*d>-cKVnjG}G5c168RI`q0 zXTF>tImt76xEbSVCdL+)+27r6ZaH;n-Jm;hFN^K;`TXF~vbD3mo$>8gs%XiWXW=Pr zyRT^#tKZZ1&4QORb}ZW1ZorqaVUs`ApVp@9wem47p4giAiRtEyhd%%M*O1Uf|S%H#arz5 zs4=Eg6FSK;)`TJ71aN8FWN`dgM`^n#R1!n z*Qq==;K!i1xu3r-JU4u8`=V9t$_=x+c`s_V^57EX$B8FTcKE#a+2&8SRcEo1ht4(F zl-SEmVB=f-5M*Kb`;I<`1D0)dY1#Tz#*(OpnCTY7EOiEs60 zG)x|N?pvy7-_pL0l^@n}+4%Q{te5)44kuUD8*IjSwz@&e_PdMUP9(K%S$j!JV2R`N`us>*x&C>-%S8?Z*vDj#&gp7c zH^Yqa9Dx=Roo$RYGZ%*5)KGCA)&p?n!_1o&DlUN83}+#1Vne8y0ox7EBA9G5Ld8rN zyt6{ZEEv3S7Q^6Wq2dylXK~l${eQu7qI*XB7-H zIICfpVU4f`hS}WEUTe(@Z8sS+g?#gHp{871yCuaI#^#!dZ{S zz=BY50}NL<|6(x!XCutkg`wgm6dX1e1T%9b%j$%$j2ce%RYHV_H?FFnJ z5L$|Uml$QS*ofV)67*hZ2Og|V&}foz{5@=N_#ahui(vjbz4Q)nIg2TjAzS2va$N3W&X!$6m^iDeStXd-2_?&^T36V` z>z&2eI3wQAV?PZSwwBbkj(@bCz29AAt>s z7QN{sFz01;p{Dr%=cgZ+=Km8xXuN#=MKOt{GSvfl``D!KloZ>g-OP5V(3ssECKT1< zEt@~2Kk7rn5Q8G2()pj!PhE>t8U3Xp0{M#oMk|Nbj+BnNrE&J8X`kYejZu+^_@k8- zJz4=y^nm;=Xjw$h#Q-|Pr$n@(p)hM;6+nMu5I{7t0gP|rq!k3kBY};R)i^n<1i}{J znS`SE-$EntF|&jc;BO&ZZkv>XXDvXPWgw8~P;>mXo|M@l1W;n=IE!^e#NQ@4o-Lm7 z%18c3FUcjc9k5*rve+z#QSH$SSm}>mo=Zuv?T1$d%7NSDh~+`pL$UBjFU_T@vIl<1 z@%GB`NT3ID*giST0bzacO#6xZdgWnV#h^dSw!o#040DXAG{0o=@Oa-O^^m@wG z04-jrn^3o)cWL%RS_R-~!8)f26kOv&<(2M!3}T+ssSEA zb)W`N6Q~8$2I>F`fJPLJph`exU>2A$U=A=Bm=7!f76OZaOdtzb3M>Pb11o@)z$zMs zDm;V(^fu6iKnAb~$OP!sqB8*+t?9r>U=%PK7z2z2{s6`S7deSvy_7ppp4aL@ySz#gao zya210z$<{>O57W1$VMg&F$b6n%mZk!)8NhovVg_F5?~T|(ED8fpm({B!^3!hUJRQC z3b)A1G0hjKmq_W&0-Ls1u*ei zBmv1l3NRQL0${?m7zzvn=>4%F)a0Q+7|;{w3UmWtC-E04G=kd@5#4}j2uJU9eh0h< zJ^&v9dhav63wk%=_5tX{(YJuxz<&T~mcN1JzzSd`uo@skT>lR~Na>Q29Sw{Dj)Tbw z;1=)&um{}=C8rP6KCv zv%opvJa7TH2wVa#16P2nz%}4Ha09prtO2$nBX{Ie4e$V}12uq}fW8(!Y6EqEx_|=k z1nL1^fH&X+_yT@_KM(-a2Lgfh$Y3Je9mwP!p6>&F0Gbo`0|$VEz<v71tLI

B&m=d(1wRga~I9%ajoJ4K8nmOfgr*8ivlza>x; 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 diff --git a/data/samples/Carrefour.txt b/data/samples/Carrefour.txt new file mode 100644 index 0000000..97e863a --- /dev/null +++ b/data/samples/Carrefour.txt @@ -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 diff --git a/data/samples/Coto.txt b/data/samples/Coto.txt new file mode 100644 index 0000000..d59ff8a --- /dev/null +++ b/data/samples/Coto.txt @@ -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 diff --git a/data/samples/Dia.txt b/data/samples/Dia.txt new file mode 100644 index 0000000..11820d7 --- /dev/null +++ b/data/samples/Dia.txt @@ -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 diff --git a/scraper/auto.ts b/scraper/auto.ts new file mode 100644 index 0000000..f65ce3e --- /dev/null +++ b/scraper/auto.ts @@ -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) })); +} diff --git a/scraper/package.json b/scraper/package.json index b37d34f..610b395 100644 --- a/scraper/package.json +++ b/scraper/package.json @@ -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" diff --git a/scraper/scrap.ts b/scraper/scrap.ts index a353354..fe794ab 100644 --- a/scraper/scrap.ts +++ b/scraper/scrap.ts @@ -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; }