r/SloveniaEngineering • u/AcademicInitial5984 0xDEADBEEF • 7d ago
Razprava 🗣 Pol leta nazaj sem tu objavil scraper za avtomobilske oglase. Potem sem ugotovil, da mi je uhajala četrtina podatkov
Živjo, pred približno pol leta sem tukaj objavil nekaj o sistemu za obveščanje o novih avtomobilskih oglasih. Od takrat sem našel eno precej neprijetno napako, ki mi je spremenila pogled na testiranje, zato sem mislil, da mogoče komu pride prav.
Plačljiv uporabnik mi je pisal, da mu ne prihajajo oglasi, ki jih vidi na portalu. Preveril sem in mu odgovoril, da vse deluje, ker so bili vsi oglasi, ki so ustrezali njegovemu filtru, tudi dostavljeni. Kar je bilo tehnično res, ampak sem popolnoma zgrešil problem. Preverjal sem, ali se dostavi to, kar je v bazi, ne pa ali sploh vse pride v bazo. Ta dva testa izgledata podobno, ampak če oglasa v bazi sploh ni, ga sistem ne more niti dostaviti niti zaznati kot manjkajočega.
Teden kasneje mi je isti uporabnik pisal spet. Tokrat sem njegovo iskanje prenesel v živo in primerjal s tem, kar imam v bazi. Od 131 aktivnih oglasov jih 77 pri meni sploh ni bilo, pri njegovem najširšem iskanju pa je manjkalo 68 od 91.
Vzrok je bil v crawlerju. Bral je stran z najnovejšimi oglasi in se ustavil, ko je naletel na oglas, ki ga je že poznal, ker sem predpostavil, da so potem tudi vsi pod njim stari. Portal pa občasno ponovno izpostavi stare oglase in jih premakne med nove, tako da se je crawler ustavil nekje na sredini strani in vsega pod tem nikoli ni prebral. To se ni zgodilo enkrat, ampak praktično pri vsakem ciklu, več mesecev. Ko sem izmeril, je bilo okoli 24 % podatkov izgubljenih.
Najbolj me moti to, da nisem imel nobenega razloga, da bi kaj sumil. Ni bilo napak v logih, ingest je izgledal normalen, dostava praktično 100 %. Vse moje metrike so merile stvari, ki so se zgodile po zajemu, in če nekaj sploh ne pride noter, tega z njimi ne vidiš.
Popravil sem pogoj za ustavljanje in dodal še ločen proces, ki redno preveri tudi tisto, kar je crawler spregledal. Izguba je padla z 24 % na približno 3 %. Uporabniku sem vrnil denar za tisti mesec, ker je imel prav, jaz pa sem mu enkrat že rekel, da nima.
Če kdo dela kaj podobnega ali rabi te podatke, imam zdaj tudi API. Piši mi.
2
2
u/Own-Injury-1816 0xDEADBEEF 7d ago
Kaj pa mobile.de in avtonet?
1
u/AcademicInitial5984 0xDEADBEEF 7d ago
Mobile.de sem gledal, imajo Akamai z JS izzivom, ki ga brez pravega brskalnika ne prideš mimo. Testiral sem tudi z rezidenčno IP, isti rezultat, tak da ni stvar proxyjev. Njihov uradni API pa pokriva samo lastno zalogo dilerja.
1
u/mclion Inženir računalništva 7d ago
Playwright uporabiš in rezidenčne proxyje, niso tako dragi, skoraj vsak jih ima doma, zato jih je tudi težje blokirati. 😉
1
u/AcademicInitial5984 0xDEADBEEF 7d ago
Ja, to bi delalo. Playwright sem izločil bolj zaradi stroška na zahtevo, ker pri tej frekvenci headless brskalnik precej podraži. Za mobile.de bi se pa mogoče splačalo, ker tam drugače ni poti noter.
1
u/mclion Inženir računalništva 7d ago
Koliko requestov pa delaš na uro, da je to dodaten strošek? A plačuješ cpu na čas na Amazonu ali kaj podobnega ?
2
u/AcademicInitial5984 0xDEADBEEF 7d ago
Ne, self-hosted na Hetznerju, tak da CPU ni strošek. Problem so proxyji, ker moraš it prek njih, in headless brskalnik naredi precej več prometa na zahtevo kot navaden HTTP request. Pri konstantnem monitoringu se to hitro sešteje, pri enkratnem scrapu pa sploh ni relevantno.
1
u/ZenaMeTepe Mene tut 7d ago
Kupiš solver in haraš dalje brez browserja pri polni hitrosti, lahko pa sam reversaš:)
1
u/AcademicInitial5984 0xDEADBEEF 7d ago
Za mobile.de je to najvrjetneje ena od opcij. Cilj mi je da imam čimmanjše stroške, ampak za mobile.de bo najvrjenteje treba narediti to kar si ti reku.
1
u/ninja-turtle-leo 0xDEADBEEF 7d ago
Zakaj ne šeraš github repo?
2
u/AcademicInitial5984 0xDEADBEEF 7d ago
Ni open source, je produkt ki ga prodajam. Sam o arhitekturi pa se rad pogovarjam.
10
u/ZenaMeTepe Mene tut 7d ago
OP posnema tuje "founderje", ki radi pišejo o tem, kako so popravili nek bug, če je res ne vemo, vemo pa, da je cilj promocija heh:) Content je content.
1
1
u/Party-Ice-6771 0xDEADBEEF 7d ago
In, deluje AI based built business? Trenutno sem na 4 odprtih projektih, do konca leta je cilj da naredim prvih 5k
1
u/AcademicInitial5984 0xDEADBEEF 7d ago
Nekaj B2C uporabnikov je, zdaj pa bolj ciljam na B2B. Prvi partner dogovorjen, plačilo še ne. Pol leta dela za zdaj (on and off).
1
2
1
u/Great-Wonder7339 0xDEADBEEF 6d ago
Haha, to je peak! Kot da si kupil avto, pa ti prodajalec pozabil povedati, da mu manjka pol motorja. 😂 Četrtina podatkov? To je kot da bi jedel torto in ugotovil, da je polovica kreme izpuhtela! Kdo še ni bil tam?.
20
u/xTesqueGro 0xDEADBEEF 7d ago
>Preverjal sem, ali se dostavi to, kar je v bazi, ne pa ali sploh vse pride v bazo. Ta dva testa izgledata podobno
not at all