Si iata ca a fost tema 2 (mai demult dar cum timpul e limitat postez despre ea acum). Am vazut ca Mihaela e mai harnica si a facut si tema 3 :).
La tema 2 am avut de facut un crawler web care sa descopere si salveze relatiile inter-personale de pe un site la alegere.
Eu am plecat de la last.fm - super site de ascultat, descoperit, impartasit muzica si evenimente asociate precum concerte, lansari de albume. Am identificat relatii de tipul X asculta aceeasi muzica cu Y (neighbour in limbaj last.fm), X este prieten cu Y.
M-au ajutat destul de mult URL-urile foarte "regulate" ale site-ului si faptul ca HTML-ul din pagini e bine structurat. De exemplu, e de ajuns sa se plece de la un nume X de utilizator, prietenii sai se gasesc la www.last.fm/user/X/friends, din pagina HTML respectiva se pot parsa usor numele prietenilor, se afla apoi prietenii prietenilor si tot asa.
Ca tehnologii, am folosit Python si sqlite pentru baza de date. Python din cauza ca e puternic, simplu, elegant si are un parser de SGML care e teribil de usor de folosit. Multi colegi au incercat sa parseze cu un parser de XML si au dat de probleme fiindca stim cu totii ca putine site-uri folosesc astazi XHTML desi ideal toate ar trebui sa o faca. Parserul XML se plangea cand dadea de HTML-ul ce respecta mai putine reguli; parserul de SGML din Python a mers perfect.
Tot legat de parser, capabilitatile dinamice si reflective ale Python sunt puse la treaba in folosirea lui. Vrei sa ti se apeleze o metoda cand incepe tag-ul <ul> In parserele standard trebuie sa iti inregistrezi o functie handler si sa faci incantatii magice :P. In Python trebuie sa definesti metoda start_ul intr-o clasa care extinde SGMLParser. Atat.
O alta chestie despre care am aflat mai multe cu ocazia acestei teme a fost sqlite. Le-am vizitat site-ul, am fost incantat de faptul ca e o solutie care face foarte multe (ofera suport pentru SQL, indecsi, tranzactii, triger-uri, view-uri) si totusi nu are nevoie de un server care sa gestioneze baza de date, nu are nevoie de nici o configurare, tine toata baza de date intr-un singur fisier self-contained si are mai putin de 250KB de cod. Daca nu era de ajuns, formatul bazei de date este neschimbat pe arhitecturi pe 32 sau 64 biti, little-endian sau big-endian. Faptul ca e un produs extraordinar de util se vede si din lista impresionanta de utilizatori.
Ce parere aveti despre cursul de Interfete Evoluate de anul acesta ?(tematica curs, laboratoare)
Se afișează postările cu eticheta Tema2. Afișați toate postările
Se afișează postările cu eticheta Tema2. Afișați toate postările
luni, 3 decembrie 2007
sâmbătă, 1 decembrie 2007
Crawler Web
Poate va intrebati cat de greu este sa faci un program care sa intre pe site-uri automat ex. yahoo360, mySpace si sa obtina informatii despre persoanele care posteaza pe acel site si relatiile intre ele si apoi sa le salveze pentru o vizualizare/prelucrare ulterioara.
Va spun eu, tot ce iti trebuie ca sa faci acel program sunt : cunostiinte minime de Java , o baza de date (MySql) si un profil de plecare pe acel site.
Prelucrarea paginii
In functie de tipul site-ului paginile pot fi xhtml sau doar html. Pentru parsarea xhtml in Java principalele pachete ce pot fi utilizate sunt org.xml.sax si javax.xml.parsers , tutoriale pentru folosirea lor se gasesc la adresele
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/sax/index.html ptr SAX si
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/dom/index.html ptrDOM.
Recomandarea mea este sa folositi SAX-ul pentru pagini mari deoarece este mai rapid, iar DOM-ul pentru pagini mai mici.
De obicei pentru a descoperii noi profile de utilizatori este deajuns sa cauti in pagina link-uri cu o anumita forma. De exemplu pentru yahoo360 url-ul pentru profil este de forma http://360.yahoo.com/profile-ID , unde ID este o combinatie de litere.
Va spun eu, tot ce iti trebuie ca sa faci acel program sunt : cunostiinte minime de Java , o baza de date (MySql) si un profil de plecare pe acel site.
Conectarea
Site-ul poate necesita logarea cu un profil pentru accesarea paginilor. Pentru aceasta va fi nevoie de pastrarea si trimiterea de cookie-uri corespunzatoare pentru a te identifica in fiecare cerere de pagina. Pentru primirea si trimiterea de cookie-uri se foloseste clasa HttpURLConnection . Un exemplu de folosire este prezentat in articolul http://martin.nobilitas.com/java/cookies.html.Prelucrarea paginii
In functie de tipul site-ului paginile pot fi xhtml sau doar html. Pentru parsarea xhtml in Java principalele pachete ce pot fi utilizate sunt org.xml.sax si javax.xml.parsers , tutoriale pentru folosirea lor se gasesc la adresele
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/sax/index.html ptr SAX si
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/dom/index.html ptrDOM.
Recomandarea mea este sa folositi SAX-ul pentru pagini mari deoarece este mai rapid, iar DOM-ul pentru pagini mai mici.
De obicei pentru a descoperii noi profile de utilizatori este deajuns sa cauti in pagina link-uri cu o anumita forma. De exemplu pentru yahoo360 url-ul pentru profil este de forma http://360.yahoo.com/profile-ID , unde ID este o combinatie de litere.
Abonați-vă la:
Postări (Atom)