Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Ripostiglio > Sezioni Storiche > Teecno
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti

Teecno Costruzione, sviluppo e promozione del nostro MdR

Hey Amico Visitatore,
Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Teecno


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 31-10-06, 19:55   #1 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 11
Invia un messaggio tramite MSN a ^woznihack^
il parser html più veloce

Questi giorni, sto cercando di ottimizzare il codice dello spider attuale per creare uno spider sull'idea di Osvi.
Effettuando una programmazione modulare, questo pomeriggio ho sviluppato un PARSER html in php cercando di crearne uno più veloce dell'attuale.
Il codice del parser è questo:

Codice:
function parser_html($html)
{
   $len =  strlen($html);
   $tag['title'] = '';
   $tag['h1'] = '';
   $tag['body'] = '';
   $tag['links']  =  array();
   for($i = 0 ; $i < $len ; $i++ )
   {
      if($tag['title']=='' &&  substr($html,$i,strlen('<title>')) == '<title>')
          $tag['title'] = substr($html,$i+strlen('<title>'),strpos(substr($html,$i+strlen('<title>')-1),'</title>')-1);
      if($tag['h1']=='' && substr($html,$i,strlen('<h1>')) == '<h1>')
          $tag['h1'] = substr($html,$i+strlen('<h1>'),strpos(substr($html,$i+strlen('<h1>')-1),'</title>')-1);
      if($tag['body']=='' && substr($html,$i,strlen('<body>')) == '<body>')

         $tag['body'] = substr($html,$i+strlen('<body>'),strpos(substr($html,$i+strlen('<h1>')-1),'</body>')-1);
      if(substr($html,$i,strlen('<a')) == '<a')
      {
         $html_rimanente = substr($html,$i);
         $href = substr($html_rimanente,strpos($html_rimanente,"href"),strpos($html_rimanente,">")-strpos($html_rimanente,"href"));
         $href =  str_replace(" ","",$href);
         $href = substr($href,strpos($href,"\"")+1,strpos(substr($href,strpos($href,"\"")+1),"\""));
         if(substr($href,0,6)!='mailto')
            $tag['links'][] = $href;
      }
   }
   $tag['title'] = ereg_replace("[[:punct:]]"," ",$tag['title']); //pulisco dalla punteggiatura
   $tag['title'] = str_replace("\n", " ",$tag['title']);
   $tag['title'] = trim(preg_replace("/[ \t]{2,}/"," ",$tag['title'])); //sostituisco gli spazi contigui e le tabulazioni con un solo spazio

   $tag['h1']    =  strip_tags($tag['h1']); //tolgo i  tag dalla pagina
   $tag['h1']    = ereg_replace("[[:punct:]]"," ",$tag['h1']); //pulisco dalla punteggiatura
   $tag['h1']    = str_replace("\n", " ",$tag['h1']);
   $tag['h1']    = trim(preg_replace("/[ \t]{2,}/"," ",$tag['h1'])); //sostituisco gli spazi contigui e le tabulazioni con un solo spazio
    
   $tag['body']    = preg_replace("'<script[^>]*?>.*?</script>'si","",$tag['body']); //tolgo eventuale  javascript
   $tag['body']    = preg_replace("/<h1>(.+?)<\/h1>/si","",$tag['body']); //tolgo gli h1 per non contare 2 volte l'occorrenza dei suoi termini
   $tag['body']    = strip_tags($tag['body']); //tolgo i tag dalla pagina
   $tag['body']    = ereg_replace("[[:punct:]]"," ",$tag['body']); //pulisco dalla punteggiatura
   $tag['body']    = str_replace("\n", " ",$tag['body']);
   $tag['body'] = trim(preg_replace("/[ \t]{2,}/"," ",$tag['body'])); //sostituisco gli spazi contigui e le tabulazioni con un solo spazio
   
   return $tag;
}
Il parser prende come parametro il codice html e resituisce una matrice così strutturata:
matrice[0] = testo del titolo
matrice[1] = testo di h1
matrice[2] = testo di body (senza nessun tag html)
matrice[3] = elenco di links trovati nel codice

scusate l'assenza di commenti e la scarsa identazione del codice.

Io chiedo a voi membri di creare dei parser html scritti con una funzione simile a quella scritta da me (magari modificando proprio quella mia ) e di postarli in questo 3d.
Dopo che avrò ricevuto tutti i parser, farò un benchmark delle prestazioni in termini di tempo di esecuzione e il più rapido sarà utilizzato nello spider di Teecno che sto sviluppando.

Buon lavoro.
^woznihack^ non in linea   Rispondi citando
Vecchio 01-11-06, 13:39   #2 (permalink)
User
 
L'avatar di phakko
 
Data di registrazione: Jun 2006
Ubicazione: Roma
Messaggi: 64
Invia un messaggio tramite MSN a phakko Invia un messaggio tramite Skype a phakko
allora io ho sviluppato un parser xml (che può essere adattato anche ad html) con xmldom (sia x php4 che php5!) è più efficiente su php4 poichè xmldom è supportato mentre x php5 ho utilizzato un port. il sistema consente l'accesso diretto ai tag, quindi rispetto al tuo substr è più gestibile.
se volete vi posto i listati.
__________________
Fabio Cicerchia - COORDINATORE TEECNO
phakko non in linea   Rispondi citando
Vecchio 01-11-06, 17:59   #3 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 11
Invia un messaggio tramite MSN a ^woznihack^
posta posta, purchè rispecchi il modello della funzione ke ho fatto io.. prende l'html come parametro e restituisce la matrice con title, h1, body e lista dei links. Se puoi già adattarlo tu sotto questa forma è bene, m risparmi del lavoro altrimenti lo riadatto io. ciao e grazie
^woznihack^ non in linea   Rispondi citando
Vecchio 02-11-06, 12:09   #4 (permalink)
 
L'avatar di Giorgiotave
 
Data di registrazione: Oct 2004
Ubicazione: Monasterace
Messaggi: 34,892
Invia un messaggio tramite Skype a Giorgiotave
Ottimo, posta pure Fabio

Ottimo anche ^woznihack^

Giorgiotave non in linea   Rispondi citando
Vecchio 11-11-06, 21:12   #5 (permalink)
User
 
Data di registrazione: Nov 2006
Ubicazione: Napoli
Messaggi: 66
Invia un messaggio tramite MSN a Andriy
Cool Spider

Salve, sono nuovo su questo forum, mi sono iscritto qualche giorno fa e sono molto interessato a questo progetto..
Secondo le mie idee e quelle di phakko sarebbe meglio creare un spider che si divide in due file..

Primo file del spider esplora soltanto il web, cioè passando un link quest'ultimo esaminando tutta la pagina e facendo il parser del html mi restituisce tutti i links contenenti nella pagina.. che poi vengono slavati nel database, alla fine del parser si ricarica la pagina e pesca dal database un altro link da esaminare.. e così a ciclo un tot di numeri che si vuole parsare di pagine alla volta, si potrebbe mettere questo file nel CronTab soltanto di notte per non rallentare il server di giorno..

La seconda pagina invece pesca i link già esaminati dalla prima pagina del spider e recupera le keywords secondo l'algortmo attuale (Tf*IDF) ecc....

In questo modo si ha un spider molto più veloce, almeno credo...

Fatemi sapere cosa ne pensate, cmq se questa idea è ottima ho quasi pronta la prima pagina del spider con diversi controlli sui links, eliminazione di links doppi ecc.... Invece la seconda pagina sarà molto simile al codice scritto in spider attuale...

Cosa ne pensate?
Andriy non in linea   Rispondi citando
Vecchio 11-11-06, 22:05   #6 (permalink)
User
 
Data di registrazione: Nov 2006
Ubicazione: Napoli
Messaggi: 66
Invia un messaggio tramite MSN a Andriy
Thumbs up Terza pagina del spider

Si potrebbe creare anche una terza pagina dello spider che esamina ogni tanto i links che sono già stati controllati in precedenza per vedere se ci sono delle modifiche...
Andriy non in linea   Rispondi citando
Vecchio 13-11-06, 12:54   #7 (permalink)
 
L'avatar di Giorgiotave
 
Data di registrazione: Oct 2004
Ubicazione: Monasterace
Messaggi: 34,892
Invia un messaggio tramite Skype a Giorgiotave
Ciao Andriy,

benvenuto nel Forum gt e grazie per voler partecipare a questo progetto

secondo me è possibile farlo questo spider anche come dici tu

Facci vedere va
Giorgiotave non in linea   Rispondi citando
Vecchio 14-11-06, 08:08   #8 (permalink)
Esperto
 
L'avatar di domenico biancardi
 
Data di registrazione: Aug 2006
Messaggi: 547
Invia un messaggio tramite MSN a domenico biancardi
scusate ma per recuperare il title di una pagina non è meglio utilizzare una regular expression?
<title>(.+)</title>
__________________
Domenico Biancardi
domenico biancardi non in linea   Rispondi citando
Vecchio 14-11-06, 09:07   #9 (permalink)
Esperto
 
L'avatar di domenico biancardi
 
Data di registrazione: Aug 2006
Messaggi: 547
Invia un messaggio tramite MSN a domenico biancardi
ho letto per bene il codice dello spider, e si usano le regular expression, molto bene

mi piace molto come è stato progettato. volevo sapere se avete adottato qualche strategia information retrieval all'interno della ricerca.
__________________
Domenico Biancardi
domenico biancardi non in linea   Rispondi citando
Vecchio 15-11-06, 01:16   #10 (permalink)
Esperto
 
L'avatar di Everfluxx
 
Data di registrazione: Jun 2006
Ubicazione: Subpadania
Messaggi: 1,257
Un consiglio: usatele il meno possibile, le funzioni di PHP basate su espressioni regolari. Sono molto più lente di str_replace() e str_ireplace().

Una domanda (alla quale prima o poi vi troverete a dover rispondere): come vi comportate con una pagina priva di tag <title>? Eheheh.
__________________
Everfluxx non in linea   Rispondi citando
Vecchio 15-11-06, 08:15   #11 (permalink)
Esperto
 
L'avatar di domenico biancardi
 
Data di registrazione: Aug 2006
Messaggi: 547
Invia un messaggio tramite MSN a domenico biancardi
Quote:
Everfluxx
Un consiglio: usatele il meno possibile, le funzioni di PHP basate su espressioni regolari. Sono molto più lente di str_replace() e str_ireplace().
dove l'hai appresa questa cosa? posso farvi qualche pagina di test, ho i miei seri dubbi su questa affermazione
__________________
Domenico Biancardi
domenico biancardi non in linea   Rispondi citando
Vecchio 15-11-06, 11:41   #12 (permalink)
Esperto
 
L'avatar di Everfluxx
 
Data di registrazione: Jun 2006
Ubicazione: Subpadania
Messaggi: 1,257
Quote:
domenico.biancardi
dove l'hai appresa questa cosa? posso farvi qualche pagina di test, ho i miei seri dubbi su questa affermazione
E' cosa risaputa (mi pare ci sia anche un tip a riguardo nel manuale di PHP)...
Comunque, se non ti fidi della mia affermazione, ti basta una semplice ricerca su Google per verificarla.
__________________
Everfluxx non in linea   Rispondi citando
Vecchio 15-11-06, 19:32   #13 (permalink)
Esperto
 
L'avatar di domenico biancardi
 
Data di registrazione: Aug 2006
Messaggi: 547
Invia un messaggio tramite MSN a domenico biancardi
no no questione di affezioniamento verso le regular expression. fare operazioni complesse in una istruzione è sempre molto bello, magari a scapito della velocità.

sta di fatto che per certe regex dovresti utilizzare 5-6 istruzioni di str_replace

non so dovrei fare dei test rimango dubbioso
__________________
Domenico Biancardi
domenico biancardi non in linea   Rispondi citando
Vecchio 20-12-06, 17:41   #14 (permalink)
User
 
Data di registrazione: Oct 2006
Messaggi: 228
Invia un messaggio tramite Yahoo a AlbertoSeo
Per le funzioni di parsing perché non vi appogiate al Perl: è dannatamente efficiente nella loro manipolazione...
AlbertoSeo non in linea   Rispondi citando
Vecchio 21-12-06, 05:36   #15 (permalink)
User
 
Data di registrazione: Sep 2005
Messaggi: 451
Io ho un consiglio da darvi in base alla mia esperienza, calcolando che ho spiderizzato qualche milione di pagina web spero che vi possa essere utile.

Fate enorme attenzione agli errori del codice html, non sembra ma incasinano di brutto.

Sembra una boiata come consiglio, ma vi accorgerete che è un problema enorme!
uMoR non in linea   Rispondi citando
Rispondi
Tags: , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 14:13.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.