Monday 12 January 2009

Cate ceva despre web crawling

Ultimul proiect la care am lucrat presupunea realizarea unei aplicatii care sa permita "cautare de stiri". Mai precis: trebuia facuta o aplicatie care sa adune stirile de pe anumite site-uri specializate ( noi am ales BBC Online si The Guardian ), sa le indexeze si apoi sa permita cautarea de stiri care sa contina anumite cuvinte cheie. Pe langa lucrurile astea de baza, aplicatia noastra facea si sumarizarea unei stiri si impartirea stirilor in categorii ( nu erau categorii prestabilite, ci in functie de gradul de asemanare al stirilor erau considerate a fi pe aceeasi tema-tratand acelasi eveniment- sau independente una de cealalta) - dar deja intru in alta poveste.

Partea care mi-a revenit mie a fost cea de crawl-are a paginilor de stiri si de extragere a a link-urilor stirilor si apoi de obtinere a continutului stirii ( eliminand tot ce nu tinea de stirea in format text - filmulete, poze, link-uri catre alte stiri, mesaje publicitare etc): de aceea am ales drept topic al acestui articol crawl-area pe internet.

O definitie pe care o puteti gasi pe wikipedia zice ca web crawler-ul este o aplicatie care face cautari in lumea WWW intr-o maniera automata pentru a aduna un anumit tip de informatie - actiunea in sine poarta denumirea de web crawling sau spidering. Site-uri care utilizeaza crawl-area pe internet sunt in special motoarele de cautare precum google. Evident, crawl-area in sine nu prea este utila daca nu se face ceva cu informatia adunata, cel mai adesea ea fiind indexata pentru a putea fi accesata intr-o maniera eficienta mai tarziu.Crawl-area este folosita si in spam-uirea utilizatorilor: pentru a aduna adrese de e-mail pe care vor fi trimise apoi tot felul de mesaje publicitare, de promovare a diverse site-uri sau produse ( chestiile din e-mail pe care multi dintre noi le sterg instant).

Cum functioneaza un Crawler?


Principial, trebuie sa existe un link sau o lista de link-uri de la care sa se plece: paginile asociate vor fi parsate, prelucrate si se vor extrage de aici anumite informatii, dar si link-urile care ne pot duce catre alte site-uri care sa fie prelucrate in aceeasi maniera - daca se doreste o crawl-are in adancime, altfel se poate rezuma totul la prelucrarea paginii principale. In cazul nostru s-a plecat de la 2 site-uri de stiri si s-au adunat continuturile stirilor - titlu + text, dar se pot extrage adrese de e-mail , preturile anumitor produse, review-urile unor filme - depinde de scopul aplicatiei + paginile din site unde putem gasi link-uri catre alte stiri. Am gasit un articol de la sun unde se spune ca de obicei crawler-ele ruleaza pe o singura masina si sunt mai putin inteligente decat virusii spre exemplu: un crawler pur si simplu trimite o cerere http pentru a obtine informatii de pe alte masini din Internet - la fel cum fac browser-ele web atunci cand introducem adresa unei pagini.
Lucrurile par nu foarte complicate, dar sunt anumite aspecte asupra carora ar trebui sa se insiste:
  • trebuie sa existe o politica de selectionare a informatiei ce prezinta interes;
  • pe de alta parte internet-ul este intr-o continua schimbare si ceea ce gasesti astazi pe o pagina se poate schimba in urmatoarea zi in mod considerabil( iar stirile pot fi updatate la fiecare ora sau la un interval relativ mic de timp) - trebuie stabilite niste criterii pentru recrawl-are;
  • crawler-ul trebuie sa fie "politicos" si sa tina cont de anumite aspecte cum ar fi ca un anumit site nu poate primi mai mult de 1000 de cereri HTTP de la acelasi IP intr-un intervar de 30 secunde sau ca este indicat sa nu fie adunate informatii de pe anumite pagini - chestiile astea sunt mentionate in fisierul robots.txt ( mai multe detalii aici).
Sper ca v-am trezit curiozitatea cu privire la subiect :)

No comments: