Web Data Miner

Acest forum este destinat anunturilor si diverselor stiri legate de industria software. De asemenea puteti anunta aici lansarea propriilor produse. Acest forum nu este pentru anunturi de locuri de munca.
Post Reply
Afx
Junior
Junior
Posts: 6
Joined: 26 Feb 2012, 21:10
Judet: Bucureşti

Web Data Miner

Post by Afx » 02 Feb 2014, 18:02

Salutare,

Va prezint cel mai nou proiect al meu personal, numit Web Data Miner (da, putin cam generic, dar il voi re-brandui la un moment dat).
WDM este o librarie (defapt mai multe dll-uri) scrisa in C#, ce iti permite sa aduni date dintr-o pagina web, prin a specifica locatia acelor date in arborele DOM al HTML.

Ca input, avem un fisier xml in care scriem pe ce site sa navigam, ce date si adunam de acolo, si unde sa navigam apoi.
Se poate porni de la o pagina, si se poate naviga catre alta pagina, de pe acelasi site sau de pe alt site. Navigatia poate fi controlata dinamic (in functie de contentul paginii curent - de ex. paginare pt produsele unui magazin online - sa stim cum mergem la pagina urmatoare).

Cand navigam la o anumita pagina, putem colecta date, prin specificarea locatiei in arborele DOM din html (zicem prin ce tag-uri sa se uite, si ce informatie finale sa colecteze). Putem aduna mai multe astfel de informatii, la un moment dat. Putem specifica daca vrem sa colectam informatia din mai multe locatii care au acelasi parinte, sau doar din primul/al 2-lea/al n-lea etc.
Informatia finala este contentul (textul) unui tag, sau valoarea unui atribut (de ex pt locatia unei imagini, luam valoare atributului src).

Odata colectate informatiile dintr-o pagina web, acestea se intorc intr-un format asemanator unei matrici, catre utilizator, printr-un callback, de unde pot fi procesate ulterior. Dupa ce callback-ul s-a apelat, engine-ul efectueaza urmatoarul task (fie colecteaza si alte informatii separat, fie se face navigarea catre o alta pagina, fie se termina totul).

Iata un exemplu simplu de fisier de input, prin care enumeram toate subforumurile de pe site-ul CodeExpert.ro:

Code: Select all

<session id="subforum enumeration" db="sfe">
  <webpage address="http://codexpert.ro/" landing="forum/">
    <query var="subforums" table="sf">
      <node name="html" index="0">
        <node name="body" index="0">
          <node name="div" index="0">
            <node name="div" index="1">
              <node name="div">
                <node name="div" index="0">
                  <node name="ul" index="1">
                    <node name="li">
                      <node name="dl" index="0">
                        <node name="dt" index="0">
                          <node name="a" index="0">
                            <content column="name"/>
                          </node>
                        </node>
                      </node>
                    </node>
                  </node>
                </node>
              </node>
            </node>
          </node>
        </node>
      </node>
    </query>
  </webpage>
</session>
"session" ne spune in ce sesiune suntem. engine-ul va putea rula simultan mai multe sesiuni, chiar multhithreaded. Cand vei primi callback-ul cu date, ti se va specifica din ce sesiune fac parte (si de pe ce site etc.)
"webpage" ii spune engine-ului pe ce site sa navigheze. In cazul asta stie ca va merge la wwhttp://codexpert.ro/, pe pagina "forum/". Navigarea inseamna efectuarea unui HTTP request, si memorarea raspunsului (paginii html).
In cadrul unei pagini, efectuam data mining specificand nodul "query". Atributul var ne identifica acest query intr-o variabila, pe care o putem folosi ulterior in alte scopuri (de genul navigare ulterioara - cum ar fi sa enumeri toate produsele de pe un site, apoi sa navighezi la fiecare in parte). "var" ni se returneaza si cand vine callback-ul de date la client.
Urmatoarele noduri "node" ne specifica unde sa ne uitam in arborele html, pentru a ajunge la informatie. Initial sunt in root-ul documentului HTML. Atributul "name" ne specifica pe ce nod sa ne deplasam. "index" ne zice pe al cate-lea din aceste noduri, sa ne deplasam, daca sunt mai multe. Lipsa lui "index" va face engine-ul sa se deplaseze pe toate nodurile cu acest nume, copii directi cu nodul in care ne aflam deja.
Sa vedem ce se intampla: suntem in root, mergem in primul nod html (name="html" index="0"), apoi in primul nod body, apoi in primul div, din care luam al 2-lea div (index="1"), de unde luam toate nodurile div, iar din fiecare luam primul div, apoi al 2-lea nod ul, din care luam toate nodurile li copii directi, apoi din fiecare nod li luam primul nod dl, apoi primul dl si apoi primul a. "content" ne spune sa luam textul din interiorul nodului curent. Aici se gaseste informatia necesara noua.
Ignorati atributele db si table, fac parte din intentia de a stoca rezultatele intr-o baza de date.
Atributul column ne identifica o informatie printr-un text dat de noi.
Rezultatul este urmatorul:

Code: Select all

START test file = 1codeexpert.xml
Xml content:
 <session id="subforum enumeration" db="sfe">
  <webpage address="http://codexpert.ro/" landing="forum/">
    <query var="subforums" table="sf">
      <node name="html" index="0">
        <node name="body" index="0">
          <node name="div" index="0">
            <node name="div" index="1">
              <node name="div">
                <node name="div" index="0">
                  <node name="ul" index="1">
                    <node name="li">
                      <node name="dl" index="0">
                        <node name="dt" index="0">
                          <node name="a" index="0">
                            <content column="name"/>
                          </node>
                        </node>
                      </node>
                    </node>
                  </node>
                </node>
              </node>
            </node>
          </node>
        </node>
      </node>
    </query>
  </webpage>
</session>
Parsing result: SUCCESS
Result arrived for session: subforum enumeration, variable: subforums
URL: http://codexpert.ro/forum/
Rows: 15, Columns: 1
Per row results:
START =======================================================
[            name]
          Anunturi
          Feedback
          Discutii
           Windows
      Limbajul C++
        Visual C++
MFC, ATL, WTL si GDI+.
       Windows API
Limbajul C++/CLI (Managed C++)
Programare generala
FAQ, Tips & Tricks
Proiecte Open-Source
            Joburi
        ITLearning
          WinAdmin
END =========================================================
Execute result: SUCCESS
End test file = 1codeexpert.xml, press any key to move to next test
Libraria este folosita dintr-o aplicatie de test, desi ea poate fi incorporata in orice aplicatie.

Am atasat si un input mai complex, cu paginare si navigatie.
Acest fisier va face urmatoarele:
- navigheaza pe un anumit site cu anunturi auto (sorry de reclama, e cel mai complex input pe care il am acum, pe moment)
- listeaza toate masinile, cu cateva proprietati, de pe toate paginile site-ului
- pentru fiecare masina, navigheaza la detalii, si le tipareste
Evident, ideea de proiect mi-a venit in timp ce imi cautam masina pe diverse site-uri cu anunturi :)
Iata si o mica parte din output:

Code: Select all

Result arrived for session: car finding, variable: lista_de_masini
URL: http://www.autovit.ro/autoturisme/
Rows: 20, Columns: 6
Per row results:
START =======================================================
[        Car Name][           Price][  Price Currency][      Build Year][        Car Type][         Mileage]
        Ford Focus             3 690               EUR              2007             Break        165 000 km
           Audi A6            27 999               EUR              2012           Berlina        124 000 km
        Opel Astra             3 499               EUR              2003             Break        186 480 km
      Peugeot 1007             3 600               EUR              2006         Hatchback        103 000 km
           Audi A4             6 299               EUR              2007             Break        189 000 km
       Ford Mondeo            12 300               EUR              2012           Berlina        137 000 km
   Volkswagen Golf             2 899               EUR              2000             Break        185 000 km
           BMW 320             2 799               EUR              2000           Berlina        196 000 km
   Volkswagen Golf             2 750               EUR              2000         Hatchback        172 000 km
        Opel Astra             4 190               EUR              2006             Break        185 000 km
  Citroën Berlingo             1 450               EUR              2002       Van/minibus        191 000 km
   Mitsubishi Colt             1 100               EUR              1997         Hatchback        198 500 km
Land Rover Range Rover            10 999               EUR              2004               SUV        148 000 km
   Volkswagen Golf             4 750               EUR              2005         Hatchback        116 000 km
       Ford Mondeo             2 790               EUR              2001           Berlina        121 000 km
     Smart Forfour             3 299               EUR              2007         Hatchback        102 450 km
 Volkswagen Passat             9 899               EUR              2010             Break        178 000 km
           Audi A3             4 150               EUR              2004             Coupe         90 000 km
            BMW X6            41 800               EUR              2011               SUV        162 000 km
 Volkswagen Passat             1 550               EUR              1998           Berlina            <null>
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//ford-focus-C32057361.html
Rows: 0, Columns: 0
Per row results:
START =======================================================

END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//audi-a6-C32057249.html
Rows: 19, Columns: 1
Per row results:
START =======================================================
[            desc]
     - A6 FULL LED
- TAPITERIE PIELE CREM
- SISTEM DE NAVIGATIE CU TOUCH
      - START/STOP
      - PARK ASIST
- PERDELUTE ELECTRICE
- CAMERA MERS INAPOI
- PACHET DE LUMINI AMBIENTALE INTERIOR SI EXTERIOR
- ASISTENTA FAZA LUNGA
   - CARTE SERVICE
  - COMENZI VOCALE
- BLUETHOOT AUDIO SI TELEFON
    - PADELE VOLAN
- CLIMATRONIC SPATE
- OGLINZI HELIOMATE
     - SERVOTRONIC
      - JANTE 18''
- SENZORI DE PARCARE FATA SPATE
- SISTEM AUDIO BOSE
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//opel-astra-C31382866.html
Rows: 19, Columns: 1
Per row results:
START =======================================================
[            desc]
Opel astra 1,6-16v ecotec 101 c.p.
            EURO 4
        an 07/2003
       Klimatronic
     Full electric
radio cd+ comenzi la volan
  parbriz heliomat
               abs
             servo
 proiectoare ceata
jante aluminiu originale + gume iarna+gume vara 90%
Kitul de distributie schimbat in Germania,
Toba  finala noua!
Recent adus in tara,nerulat ro
stare tehnica si estetica impecabile
Km reali + carte service
Inmatriculata acuma in 09.01.2014 cu toate taxele achitate,
!!!Ofer certificat fiscal + adeverinta ANAF !!
Accept orice teste!!!
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//peugeot-1007-C32057308.html
Rows: 1, Columns: 1
Per row results:
START =======================================================
[            desc]
recent adusa din franta,nu sau scos numere rosii,motor 1,4 hdi,consum mic,usile se deschid din telecomanda,are climatron
ic,geamuri si oglinzi electrice,pilot automat,parctronic spate,in stare foarte buna.
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//audi-a4-C31795021.html
Rows: 15, Columns: 1
Per row results:
START =======================================================
[            desc]
MASINA PERFECTA DIN ORICE PUNCT DE VEDERE !!!
-UNIC PROPRIETAR IN GERMANIA
-CARTE SERVICE DOAR LA AUDI,ULTIMA INSPECTIE IN OCTOMBRIE 2013
-MOTORUL CU UN SINGUR AX CU CAME SI INJECTOARE POMPE DIUZE (CEL FARA PROBLEME)
 -SCAUNE INCALZITE
-SISTEM DE NAVIGATIE
-COMPUTER BORD COLOR
-CD/MP3 PLAYER CU POSIBILITATE CONECTARE IPOD SAU IPHONE
-SENZORI PLOAIE+LUMINI+PARCARE
 -VOLAN CU COMENZI
         -TEMPOMAT
-OGLINDA ELECTRICA CU ANTIORBIRE
-JANTE ALUMINIU CU CAUCIUCURI FOARTE BUNE
 -VOPSEA ORIGINALA
NU ACCEPT VARIANTE !!
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//ford-mondeo-C32057274.html
Rows: 20, Columns: 1
Per row results:
START =======================================================
[            desc]
FORD MONDEO 2.0 TDCI 140CP FACELIFT EURO 5
04/2012 TITANIUM PLUS
-DISTRONIK(CRUISE CONTROL ADAPTIV)
-LANE ASSIST+SIDE ASSIST
-SENZOR OBOSEALA+UNGHI MORT
-AUTOMAT FAZA LUNGA
    -PERDELE SPATE
-KEYLESS GO KEYLESS ENTRY
 -PARBRIZ INCALZIT
-AUTOMAT POWER SHIFT CU DUBLU AMBREAJ
-SISTEM LED FATA/SPATE
-FORD CONVERSE PLUS
-NAVI MARE CU TOUCHSCREEN 3D+MP3+HDD+USB+AUX
     -CROM INT/EXT
  -CARLIG ELECTRIC
-SENZ PARCARE+PLOAIE+LUMINA+PRES.PNEU
    -DUBLU CLIMATR
     -LINGUATRONIC
    -KM 100% REALI
-CARTE SERVICE+FACT./GARANTIE
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//volkswagen-golf-C32057265.html
Rows: 22, Columns: 1
Per row results:
START =======================================================
[            desc]
* VW GOLF 4 TDI - 101 CAI
   * MODEL EDITION
   * COMPUTER BORD
  * TOTUL ORIGINAL
* FARURI R 32 CU ANGEL EYES/XENON
    * STOPURI  LED
      * 6 X AIRBAG
* PROIECTOARE IN FARURI
   * PACHET LUMINI
* SCAUNE RECARO ALBASTRE
           * CLIMA
* 4 X GEAMURI ELECTRICE
  * CARLIG REMORCA
* INCHIDERE CENTRALIZATA
* OGLINZI ELECTRICE
* MOTOR 101 CAI - POMPE DIUZE -- CONSUM 5.5% ORAS
* INTERIOR DEOSEBIT
* ECHIPATA CU CAUCIUCURI DE IARNA
* PRIMUL SET DE NUMERE ROSII
* ACCEPT ORICE VERIFICARE
* STARE IMPECABILA !!
* TAXA MICA - 500 EURO
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//bmw-320-C31775606.html
Rows: 15, Columns: 1
Per row results:
START =======================================================
[            desc]
recent adusa din Germania,masina ingrijita in stare buna de functionare....nu doresc schimburi
Dotari -senzori ploaie
 -COMPUTER DE BORD
      _CLIMATRONIC
-VOLAN MULTIFUNCTIONAL
         -TEMPOMAT
-4GEAMURI ELECTRICE
-OGLINZI ELECTRICE
    -ABS,SERVO,ESP
  -TRAPA ELECTRICA
          -CENTRAL
            -XENON
-SENZORI DE PARCARE,senzori ploaie
      -JANTE ALIAJ
SCAUNE INCALZITE ELECTRIC..accept testare
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//volkswagen-golf-C32057264.html
Rows: 12, Columns: 1
Per row results:
START =======================================================
[            desc]
VW. GOLF 1.9TDI 116 CP 6 TREPTE
-4XGEAMURI ELECTRICE
-JANTE ALUMINIU  15
-NUMERE ROSII,PRIMUL RAND
-OGLINZI ELECTRICE INCALZITE
-SCAUNE SPORT SI REGLABILE PE INALTIME
      -CLIMATRONIC
    -BORD COMPUTER
         -6XAIRBAG
-COTIERA FATA-SPATE
-MASINA MERGE IMPECABIL NU BATE
-TAXA MICA 460E CONSUM REDUS 4% EXTRAURBAN.
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//opel-astra-C32057246.html
Rows: 16, Columns: 1
Per row results:
START =======================================================
[            desc]
  Trapa panoramica
       Climatronic
  Incalzire scaune
     Bord computer
     Pilot automat
Volan piele cu comenzi
       Buton SPORT
      Scaune sport
 Geamuri electrice
Oglinzi electrice si incalzite
Jante aliaj originale 16"
 Proiectoare ceata
150 C.P.  6 viteze
Recent adus din Germania
 Stare foarte buna
Numere de zoll valabile pana in 26.02.2014.
END =========================================================
Result arrived for session: car finding, variable: car_description
URL: http://www.autovit.ro//citroen-berlingo-C32057237.html
Rows: 18, Columns: 1
Per row results:
START =======================================================
[            desc]
-CITROEN BERLINGO 1.4-75 CP
-ADUSA DIN GERMANIA
-EURO 3-CO2-168 -TRECUT IN BRIF
    -CARTE SERVICE
-SINGURUL DEFECT(USA DREAPTA LATERALA SI USOR ARIPA ZGARIATE IN PARCARE)
 -TOTUL FUNCTIONAL
-NU NECESITA NICI O INVESTITIE(NU BATE,NU TRONCANE.NU ARE PUNTEA STRAMBA,FARA RUGINA,ETC)
-CEL MAI MIC PRET DUPA PIATA GARANTAT
-PRET USOR NEGOCIABIL LA FATA LOCULUI
-NU DERANJATI CU OFERTE ABERANTE
  -AER CONDITIONAT
-GEAMURI ELECTRICE
       -2 X AIRBAG
              -ABS
            -SERVO
     -USI LATERALE
 -CARLIG REMORCARE
  -GEAMURI FUMURII
END =========================================================
...
...
...
Daca nu v-ati plictisit deja, si ati ajuns pana aici, as fi recunoscator in privinta unui feedback - de orice fel, nu conteaza :)
Codul sursa nu pot sa-l fac public, tot ce pot sa mentionez este ca e scris in C#, si include un parser HTML scris de la 0.

Mutlumesc,
Vlad
Attachments
6autovit.ro.rar
Input complex
(828 Bytes) Downloaded 524 times



Post Reply