Michal Poláčik - Vyhľadanie inzerátov

    Table of contents
    No headers

    Zadanie:

    • vyhľadanie inzerátov pre zadaný produkt
    • webcrawler ako .NET desktopová aplikácia

     

    Inzertné portály

    Na slovenskom i svetom internete existuje široká ponuka inzertných portálov, čo motivuje inzerentov ako aj hľadačov inzerátov navštíviť viaceré z nich.

    Najnavštevovanejšie všeobecné inzertné portály v SR dokumentuje nasledujúca tabuľka s údajmi z portálu naj.sk za mesiac november 2008:

    poradie  meno počet návštev  
    1 Inzercia.sk - inzercia a inzeráty zdarma Inzeráty zadarmo, predaj, kúpa, autobazár, reality, práca, mobily, počítače, športové potreby, zvieratá. 557 330 Návštevnosť
    2 PREDAJ.sk - inzercia zdarma Aktuálne inzeráty prehľadne zoradené v kategóriách: reality, nehnuteľnosti, auto-moto, nájom, počítače, práca, elektronika, mobilné telefóny, zdravie, drobnochov, bývanie. 541 013 Návštevnosť
    3 BabyBazar.sk Internetový bazár detského oblečenia, autosedačiek, kočíkov a iných potrieb pre deti. Už vyše 100.000 inzerátov. Pridajte svoj inzerát zdarma! 351 239 Návštevnosť
    4 Bezplatná súkromná inzercia Súkromná inzercia prehľadne rozdelená do kategórií. 17 468 Návštevnosť
    5 Webinzeraty.sk - inzercia Inzercia: auto-moto, reality, práca, pc, mobil, zvieratá. 16 888 Návštevnosť
    6 Darujem.sk - Bezplatná inzercia Stránka zameraná na recykláciu užitočných vecí či už za odvoz, symbolickú alebo aj nesymbolickú cenu. Návštevníci môžu prezerať, odpovedať a pridávať na inzeráty. 16 149 Návštevnosť
    7 Inzercia66 Inzercia lokálneho charakteru zo slovenských miest a obcí. Predaj a kúpa čohokoľvek, ubytovanie, lokálne služby, prehľad udalostí a akcií. 15 300 Návštevnosť
    8 Bazárik.eu - vecičky nielen pre Vaše detičky Internetový bazárik - detské oblečenia, kočíky, detský nábytok - recepty, fotoalbumy, diskusie - veľa čítania. Pridajte aj Vy inzerát Zadarmo. 13 389 Návštevnosť
    9 Televízo Bezplatná inzercia, živé vysielanie, veštenie na živo, recepty, ponuky práce, erotické klipy. 11 497 Návštevnosť
    10 Bezplatná inzercia - zalacno.sk Inzeráty zdarma - predám, kúpim, darujem, hračky, detské veci, zvieratká, oblečenie, knihy, počítače, autodiely a iné. 9 622 Návštevnosť

     

    Najpopulárnejšie svetové inzertné portály podľa stránky Alexa.com sú:

    Portál Webové sídlo
    1. Yahoo Autos autos.yahoo.com
    2. Cars.com www.cars.com
    3. Adpost.com Classifieds www.adpost.com
    4. USFreeads www.usfreeads.com
    5. BizBuySell www.bizbuysell.com
    6. Vast www.vast.com
    7. Cracker cracker.com.au
    8. BusinessesforSale.com www.businessesforsale.com
    9. Domestic Sale www.domesticsale.com
    10. Sell.com Classifieds www.sell.com

     

    Väčšina stránok umožňuje vyhľadávanie podľa názvu hľadaného produktu, kategórie a lokality. Niektoré ponúkajú aj rozšírené vyhľadávanie aj podľa typu inzerátu, ceny či dátumu vloženia.

     

    Možné prístupy k riešeniu:

     


    1. Hľadanie cez Google API

    +     Pravdepodobne najjednoduchšia implementácia

    +     Rýchlosť vyhľadávania

    -       Neaktuálnosť inzerátov

    1. Použitie lokálnych vyhľadávačov jednotlivých inzertných portálov

    +     Najvyššia aktuálnosť inzerátov

    +     Rýchlosť vyhľadávania

    +     Jednoduchosť implementácie

    -       Pre každý portál je potrebné definovať spôsob vyhľadávania

    1. Indexovanie všetkých inzerátov a hľadanie vo vlastnom indexe

    +     Najlepšia rýchlosť vyhľadávania

    -       Potreba častého indexovania stránok pre zaistenie aktuálnosti

    -       Rýchlosť crawlavania a indexovania

    -       Náročnosť implementácie

    -       Náročnosť na výpočtový výkon a rýchlosť pripojenia k Internetu

     

    Po zvážení pre a proti som sa rozhodol použiť druhý zo spomenutých prístupov.

    Spomedzi slovenských inzertných portálov som sa rozhodol optimalizovať vyhľadávanie pre prvé 2 stránky zo zoznamu (inzercia.sk a predaj.sk) + server bazos.sk, ktorý nie je monitorovaný na naj.sk.


    Štandardné atribúty inzerátu:

     

    Pre inzeráty má zmysel rozpoznávať typické atribúty uvádzané na väčšine významných inzertných stránkach:

    • Typ inzerátu – predám, kúpim alebo darujem
    • Nadpis
    • Popis
    • Dátum vloženia
    • Cena
    • Kontaktné údaje na inzerenta
    • Lokalita

     

    Postup pre vyhľadanie inzerátov:


    1. Dopyt na vyhľadanie inzerátov od používateľa - napr. Palm Tungsten T2
    2. Vyskladanie URL inzertnej stránky, ktorá poskytuje výsledky vyhľadania pre zadaný dopyt, napr. http://www.inzercia.sk/search/?kw=Palm+Tungsten+T2&strana=1
    3. Stiahnutie danej stránky
    4. Rozpoznanie inzerátov na nej pomocou regulárneho výrazu.
    5. Rozpoznanie políčok inzerátu pomocou regulárnych výrazov.
    6. Konverzia atribútov do jednotného formátu.
      • Konverzia dátumov
      • Konverzia čísiel
    7. Uloženie do vhodnej pamäťovej štruktúry
    8. Usporiadanie výsledkov podľa času podania inzerátu
    9. Prezentovanie výstupov používateľovi

     

    Všetky dáta si stačí uchovávať v pamäti. Nie je potrebné výstupy ukladať na disk ani do databázy.


    Implementácia:

     

    Pre zvolenú platformu Microsoft.NET som na Internete našiel 3 open-source projekty webových crawlerov: Nutch.NET, Arachnode.NET, Web Crawler. Vzhľadom na nedostupnosť prvého a zložitosť druhého zo spomenutých programov som sa rozhodol ako základ pre môj program použiť knižnicu Web Crawler.

     

    Z nej som použil len mechanizmus pre získanie webstránky zo zadanej URL ako textového reťazca obsahujúceho HTML kód stránky.

    Najťažšou úlohou bolo vymyslieť spoľahlivý spôsob, ako identifikovať inzerát na stránke a následne jeho atribúty. Pôvodne som chcel využiť najmä XPATH výrazy do XML dokumentu, ktorý mi dodal Web Crawler spracovaním stiahnutého HTML kódu. Tento spôsob sa ukázal ako nevhodný, pretože sa pri konverzii HTML do XML zlúčil text XML elementu pred a po vnorenom elemente a vznikol nezmyselný text. Napr. "Predám <b>DVD</b> prehrávač" sa prekonvertovalo na "Predám prehrávač <b>DVD</b>".

    Nakoniec som všetky úlohy identifikácie inzerátov a ich atribútov riešil použitím regulárnych výrazov, ktoré som prispôsoboval a testoval na HTML kóde 3 zvolených významných portálov: inzercia.sk, predaj.sk a bazos.sk Výrazne mi pri práci pomohol nástroj na tvorbu regulárnych výrazov RegexBuddy.

    Zaujímavou výzvou bola voľba spôsobu identifikácie začiatku a konca inzerátu. Bolo tiež potrebné nájsť kompromis medzi všeobecnosťou riešenia a podielom chybne identifikovaných inzerátov. Nakoniec sa ukázalo, že chybné označenie časti HTML kódu za inzerát sa dá pri identifikovaní políčok inzerátu ľahko odhaliť podľa počtu úspešne identifikovaných políčok. Inzerát som identifikoval na základe názvu CSS triedy HTML elementu, ktorý v sebe obsahoval údaje o inzeráte.

    Pri rozpoznávaní nadpisu a URL inzerátu som využil fakt, že väčšina inzertných stránok uvádza ako prvý údaj o inzeráte nadpis inzerátu, ktorý je zároveň odkazom na stránku s detailnejšími informáciami.

    Pri extrakcii ceny inzerátu som bral do úvahy len cenu v eurách vzhľadom na zavedenia eura v SR od januára 2008. Pri identifikovaní ceny v eurách som sa zameral na hľadanie symobolu € či textu EUR. Bolo tiež potrebné sa vysporiadať s rôznymi formátmi zápisu čísiel. Cenu dohodou som identifikoval nájdením textového reťazca "dohodou".

     

    Použité regulárne výrazy pre rozpoznanie inzerátu a jeho atribútov:

     

    Začiatok inzerátu: <([A-Z][A-Z0-9]*)[^>]*class\s*=\s*(\"|')(inzerat|inzLight|inzDark)(.*?)(\"|')>

    Cena: (EUR|€)\d+([,.]\d+)?|\d+([,.](-|\d+))?(EUR|€)|<([A-Z]*)[^>]*class\s*=\s*(\"|')?cena(\"|')?(\D*?)(\d*?)([,.]\d+)?(\D*?)</\6>

    Cena dohodou: \Wdohodou\W

    Nadpis a URL: <a\s[^>]*href\s*=\s*("|')[^"']*inzerat[^"']*(\"|')[^>]*>(.*?)</a>

    Popis: <p>(.*?)</?p>|<([A-Z][A-Z0-9]*)[^>]*class\s*=\s*(\"|')?popis(.*?)</\2>

    Dátum vloženia: \b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012]|január|február|marec|apríl|máj|jún|júl|august|september|október|november|december)[- /.](19|20)?[0-9]{2}\b

    Typ inzerátu, lokalitu a kontaktné údaje som neextrahoval.

     

    Vyhodnotenie:

     

    Pre overenie efektívnosti použitia navrhnutého a implementovaného programu InzeratyCrawler na vyhľadávanie inzerátov som vykonal 3 série testov. V každej som zadal podobný dopyt na stránkach google.sk, inzercia.sk a do programu InzeratyCrawler. InzeratyCrawler prezentoval nájdené výsledky z 3 inzertných portálov: inzercia.sk, predaj.sk a bazos.sk. InzeraryCrawler prehľadával iba prvé 2 stránky výsledkov vyhľadávania uvedených inzertných portálov. Z nájdených výsledkov som v každom prípade bral do úvahy len prvých 20. Vyhodnotenie pokrytia som nerobil, pretože som nedokázal určiť celkové množstvo inzerátov, ktoré pre zadaný dopyt na slovenskom internete naozaj existuje. Výsledky a parametre experimentov dokumentuje nasledujúca tabuľka:

     

    Dopyt Nástroj # dokumentov # overovaných dok. # relev. dok. Presnosť
    inzerát OR predám DVD film Blade Google 583 20 4 0,2
    DVD film Blade InzeratyCrawler 24 20 0 0
    DVD film Blade inzercia.sk 283 20 0 0
    inzerát OR predám Nokia 6220 Google 14 000 20 20 1
    Nokia 6220 InzeratyCrawler 74 20 11 0,55
    Nokia 6220 inzercia.sk 524 20 17 0,85
    doučím angličtinu Google 25 400 20 20 1
    doučím angličtinu InzeratyCrawler 27 20 15 0,75
    doučím angličtinu inzercia.sk 106 20 17 0,85

     

    Výsledky meraní ukazujú ako najlepšiu voľbu pre vyhľadávanie inzerátov vo všetkých prípadoch Google. Na druhom mieste sa umiestnilo priame vyhľadávanie na portáli inzercia.sk. Najhoršie sa predviedol môj program InzeratyCrawler, a to i napriek tomu, že našiel a správne identifikoval všetky inzeráty (aj ich atribúty), ktoré vrátilo vyhľadávanie na portáli inzercia.sk. Poukazuje to na nevhodne zvolený spôsob určovania relevancie nájdených inzerátov v mojom programe - zoraďoval som len podľa dátumu vloženia inzerátu. Inzeráty som zoraďoval podľa dátumu vloženia, zatiaľ čo inzercia.sk tak robila podľa relevancie určenej vlastným algoritmom. Keby som ponechal poradie relevancie prevzaté z portálu inzercia.sk, dosiahol by som rovnaké výsledky. Pre zhrnutie nájdených inzerátov z viacerých portálov by bolo nutné porovnávať relevanciu inzerátov z rôznych portálov.

     

    Použitie programu:

    Program InzeratyCrawler je jednoduchý nenáročný program na vyhľadávanie inzerátov na slovenskom internete.

    Nevyžaduje žiadnu inštaláciu - stačí rozbaliť priložený ZIP archív InzeratyCrawler.zip a spustiť jediný spustiteľný súbor InzeratyCrawler.exe.

    Program pre svoje fungovanie vyžaduje operačný systém Microsoft Windows s nainštalovaným Microsoft .NET Frameworkom vo verzii 1.1 ako aj 2.0 a fungujúce pripojenie na Internet cez protokol HTTP.

    Program ponúka intuitívne ovládanie:

    V ľavom hornom rohu okna sa nachádza textové pole pre zadanie maximálnej hľbky hľadania, t.j. maximálny počet stránok výsledkov vyhľadávania z 1 inzertného portálu, z ktorých sa majú získavať inzeráty.

    V strede hore sa zadáva dopyt pre vyhľadanie inzerátov. Tento sa v nezmenenej podobe predáva inzertným portálom, ktoré na jeho základe vrátia zoznam relevantných inzerátov.

    Hľadanie inzerátov sa spustí stlačením tlačidla Spusti, ktoré sa nachádza na obrazovke vpravo hore.

    Následne sa spustí spracovanie požiadavky, ktoré trvá spravidla rádovo niekoľkko sekúnd, v závislosti od zadanej maximálnej hĺbky hľadania.

    Priebeh práce sa zapíše do logu na spodu obrazovky.

    Nájdené inzeráty sa zobrazia v strede obrazovky vo forme tabuľky s atribútmi Názov produktu, Cena, Dátum zverejnenia, Popis a Odkaz na stránku inzerátu. Tabuľka umožňuje preusporiadať stĺpce systémom drag&drop. Po kliknutí na odkaz sa otvorí okno predvoleného internetového prehliadača a načíta sa stránka zvoleného inzerátu.

     

    Záver:

    V dokumente som analyzoval problematiku vyhľadávania inzerátov na Internete. Navrhol a implementoval

    som program pre hľadanie inzerátov na slovenských inzertných portáloch. Program dokáže takmer bez chýb nájsť inzeráty na portáloch inzercia.sk, predaj.sk a bazos.sk, rozpoznať ich názov, popis, cenu v eurách a dátum pridania a v prehľadnej forme ich prezentovať používateľovi. Po kliknutí na odkaz pri inzeráte si používateľ môže prezrieť detaily inzerátu na stránke inzerátu.

    Ako najlepšie riešenie pre vyhľadávanie inzerátov na slovenských stránkach sa ukázalo vyhľadávanie na Google. V prípade dôležitosti aktuálnosti výsledkov by som odporúčal použiť vyhľadávanie priamo na inzertných portáloch. Pre sledovanie, aké inzeráty na zvolený produkt či službu pribudli v poslednom období, je podľa môjho názoru ideálny práve môj program - InzeratyCrawler.

     

    Odkazy:

    • Všeobecne o web crawleroch na Wikipedii
    • Open-source web crawlery:
      • Nutch - originál v Jave
      • Nutch.NET - jeho port na Microsoft.NET, zatiaľ nie je k dispozícii na stiahnutie
      • Arachnode.NET - prepracovaný .NET 2.0 web crawler využívajúci SQL Server 2005
        • Slabá dokumentácia
        • Inštalácia je trochu zložitejšia, mne sa to nepodarilo rozbehať, ale keby mal niekto odvahu, tak takto vyzerá začiatok:
          1. Download zdrojákov a návod na inštaláciu
          2. V prípade problémov s assembly na databáze vykonať nasledujúci SQL kód: "sp_changedbowner sa"
          3. V prípade padania aplikácie debugovať podľa tejto stránky.
      • Web Crawler - jednoduchý .NET 1.1 web crawler
        • nepoužíva databázu
    • RegexBuddy - nástroj pre prácu s regulárnymi výrazmi

     

    Tag page (Edit tags)
    • No tags

    Files 4

    FileSizeDateAttached by 
     InzeratyCrawler.zip
    Implementovaný program
    32.35 kB23:18, 6 Dec 2008Michal.PolacikActions
     Polacik-Vyhladavanie-inzeratov.ppt
    Prezentácia
    174.5 kB18:34, 11 Dec 2008Michal.PolacikActions
     screenshot.gif
    Snímka obrazovky programu s nájdenými inzerátmi
    60.39 kB23:22, 6 Dec 2008Michal.PolacikActions
     Zdrojaky.zip
    Zdrojové súbory pre Visual C# 2005
    47.76 kB23:18, 6 Dec 2008Michal.PolacikActions
    Viewing 3 of 3 comments: view all
    It is well known that cash can make us disembarrass. But what to do if someone does not have cash? The only one way is to try to get the <a href="http://bestfinance-blog.com/topics/credit-loans">credit loans</a> or college loan.
    Posted 05:23, 14 Oct 2010
    The loan suppose to be very useful for people, which want to ground their own organization. By the way, that's easy to receive a auto loan.
    Posted 01:00, 9 Dec 2011
    One remembers that men's life is not very cheap, but some people need cash for various issues and not every man earns enough cash. Therefore to receive some credit loans or car loan will be a correct way out.
    Posted 01:01, 9 Dec 2011
    Viewing 3 of 3 comments: view all
    You must login to post a comment.
    Powered by MindTouch Core