duminică, 25 noiembrie 2007

Cum sa-ti faci propriul Crawler? Partea a 2-a

Buun, ne-am intors cu partea a doua (si ultima) despre crawlere, la sfarsit, vom avea si niste cod disponibil.
Ok unde ramasesem? Hmmm...nu mai tin minte. A! Da! Probleme de implementare. Ok, pana acum am presupus ca informatiile(link-urike) pe care le cautam sunt valide. Nu este chiar asa simplu: unele link-uri s-ar putea sa fie momentan sau permanent indisponibile, altele s-ar putea sa fie pur si simplu scrise gresit. Nu voi intra in detaliu, deoarece majoritatea limbajelor au posibilitatea de tratare a acestor greseli/erori/exceptii. O mica nota: pentru link-urile care nu mai sunt valide, se poate folosi WayBack Machine (care se bazeaza tot pe un crawler), unde se poate gasi un snapshot al unei pagini la o anumita data.
Acum avem toate link-urile valide, numai ca nu sunt toate necesare. De exemplu, unele link-uri sunt spre site-ul curent. Si asta se face usor.
Sa zicem ca am terminat. Dupa cum am spus anterior, eu am ales sa fac acest script in Python si rezultatul va fi un graf orientat. Asa arata rezultatul:


Eu am folosit Graphviz pentru a defini graf-ul. Este usor de folosit, foarte customizabil si graf-ul poate capata diferite forme.
Cam atat despre mini crawler-ul nostru. Mai multe implementari aici, adica pe site-ul nostru weblab.3x.ro . Sper ca a fost cat de cat interesant.

PS: Despre WayBack Machine si crawler-ul asociat se pot spune multe. Crawler-ul este open source. Nici nu vreau sa ma gandesc in cate feluri se poate folosi WayBack Machine. Totusi, voi da un exemplu: Un crawler temporal care poate observa nu doar relatiile prezente dintre site-uri/entitati ci si relatiile temporale. Am spus destul.

joi, 15 noiembrie 2007

Cum sa-ti faci propriul Crawler? Partea 1

Ti-a trecut vre-o data prin cap sa faci asa ceva? Ti se pare interesanta ideea? Nu-i greu deloc. Ideea e simpla, scrii un program/script care partseaza continutul unui site si extrage continutul acestuia (doar ce te intereseaza). In functie de continut, poti alege sa vizitezi anumite link-uri. Toata aceasta informatie este apoi pusa intr-o forma usor accesibila (un XML sau baza de date).

Exista cateva alegeri pe care va trebui sa le faci inainte:

- Ce limbaj foloses? Cam orice iti convine de la C, C++, Java la limbaje de scripting gen Perl, Pythom, Ruby, etc. Cam toate au mai multe implementari de parsere HTML si XML. Eu am ales Python, pentru ca imi este foarte comod si este rapid de implementat.

- Ce parser folosesc? Aici conteaza ce tip de site vrei sa parsezi. Sa zicem ca dorim sa extragem informatiile dintr-un blog de pe blogger.com. Asta inseamna ca avem XHTML. Buun, simplu, folosim un parser de XML! Sau nu... Exista o mica problema aici, legata de corectitudinea XML-ului. La o validare a XML-ului, vom primi un raspuns negativ. Ce e de facut? Pai, cel mai simplu, facem un pas inapoi in istorie si ne amintim de SGML, tatal XML-ului si HTML-ului. Acum avem un grad mai mare de flexibilite si putem folosi scheme malformate, ceea ce si cautam. Nu am specificat tehnologia de parsare XML, SAX sau DOM. Ei bine, SAX este mai potrivit scopului, deoarece este mai rapid si nu avem nevoie de toate informatiile din pagina.

- Cat de mult vreau sa parsez, care este volumul de date cu care se va lucra si viteza dorita? In functie de acestea vom obtine gradul de complexitate si scalabilitate al crawler-ului. Pentru exercitiul nostru nu avem nevoie de ceva prea complicat, volumul de date nu e prea mare, datele parsate sunt destul de putine. Daca totus vrei ceva mai bun este recomandat sa cauti crawlere deja existente. Daca tii mortis sa iti faci propriul crawler care parseaza un volum foarte mare de date si mai este si rapid, iata niste idei: foloseste thread-uri multiple (dooh), foloseste un model de procesare paralela (boss worker, work crew, etc), pentru a tine minte site-urile gata vizitate foloseste una sau mai multe stive (desi ar merge si alte structuri de date...).

- Ce vreau sa fac cu datele obtinute? Un crawler n-are nici un folos daca nu folosim datele obtinute in urma rularii sale. Un functie de nevoi, datele se pot scrie intr-un fisier format XML , in propriul format sau intr-o baza de date. Un exercitiu interesant este sa se creeze un graf al datelor citite. Cu graphwiz se face foarte usor asta: un graf este reprezentat de un fisier text care specifica legaturile dintr nod-uri.

Dupa ce ai raspuns la toate acestea poti sa te apuci de partea cea mai simpla, implementarea ;) . Glumesc, nu e cea mai simpla, dar nici grea nu este, deoarece exista o gramada de parsere care ne vin in ajutor.

Atat pentru partea 1. In partea a doua va exista si o implementare.

marți, 6 noiembrie 2007

Sa ne facem si site-ul cunoscut...

Site-ul nostru este weblab.3x.ro si contine(cel putin pana acum) tema 1 la interfete evoluate.Vom adauga si viitoarele teme cat si articole despre tehnologiile folosite pentru realizarea acestora.De astazi site-ul a fost inscris pe trafic.ro asa ca vizitati-ne cat mai des.

Lucruri esentiale

Cand am creat blogul ,primul post ar fi trebuit sa fie o descriere a membrilor echipei.Cum niciodata nu este prea tarziu, facem acest lucru in acest post.Suntem 4 studenti, fosti sau actuali colegi de grupa,unii chiar colegi de camera,insa cu totii avem un punct comun(pe langa acest blog):Facultatea de Automatica si Calculatoare.O descriere cat mai scurta(nu de alta dar avem 2 membri carora nu le place sa fie prezentati) si concisa :Ana si Dragos sunt cei care vor scrie cu siguranta articolele tehnice iar eu cu Alex vom avea posturi asemanatoare cu acesta.Inca nu ne-am decis care e liderul nostru.Cam greu cu 2 berbeci,un leu si un rac.Eu cam atat pot spune.Daca mai vrea cineva sa adauge ceva la propria descriere (sau chiar la descrierea echipei) poate da un comment.

sâmbătă, 3 noiembrie 2007

Ce ne pregateste Firefox?

De ce ne place Firefox? Raspunsurile sunt multe, dar printre capetele de lista se numara extensibilitatea sa. De curand, s-a anuntat pe Firefox labs un nou proiect in dezvoltare. Se numeste Prism, este o platforma pentru desprinderea aplicatiilor web de browser. Astfel, serviciile web vor fi standalone folosind resursele oferite de Prism. De exemplu, GMail sau Google Reader sunt accesibile direct de pe desktop, ca aplicatii separate. Nu este un feature foarte mare, dar poate schimba mentalitati. Pe de alta parte, poate aparea ca un derivat nereusit al widget-urilor. Ramane de vazut daca va avea succes la useri.
Un lucru e sigur, Google are un avantaj direct din acest proiect. Ceea ce este normal, caci ei sunt cei mai importanti investitori in Mozlilla Foundation. Pentru mai multe detalii aici.
Firefox labs este playground-ul comunitatii Firefox, mai exista cateva proiecte interesante in derulare. Check them out!