Grafo di un sito internet: un esempio in Python

Grafo di un sito internet e ranking: un esempio in Python
Condividi se ti piace...

Grafo di un sito internet e ranking: un esempio in PythonGrafo di un sito internet: di cosa si tratta?

Tutte le tecnologie, anche quelle di uso quotidiano, hanno alla base un modello matematico ed algoritmi di supporto alla loro implementazione e non sono da meno le tecnologie web. Un esempio classico è il modello linguistico utilizzato nella ricerca semantica da Google e l’algoritmo di stemming per il filtraggio delle stopwords.

Un modello molto più ampio che viene utilizzato da molte tecnologie web è quello basato sui Grafi. Avete mai sentito parlare di Knowledge Graph di Google? O di grafo sociale (o rete sociale) riferito ai social network come Facebook e Linkedin?

Modelli basati sulla teoria dei grafi aiutano a stabilire a rigore le varie connessioni che vi sono tra oggetti o soggetti, stabilendone anche un grado di connessione (o un peso, un’importanza) nell’intero contesto in esame.

Google valuta il nostro sito internet facendo anche delle analisi di questo tipo: vede il nostro sito come un grafo e in buona sostanza stabilisce:

  • quali sono le connessioni interne (i link interni alle nostre pagine) e quali sono quelle che hanno più valore;
  • quali sono le connessioni con l’esterno e dandoci un punteggio anche in base al ranking dei siti a cui puntiamo (rilevante principalmente per i post nei quali documentiamo con link esterni di qualità).

 

MA COS’È UN GRAFO?

Un grafo è una struttura matematica discreta le cui proprietà sono definite dalla Teoria dei Grafi. Non è da confondere con il grafico, che non è altro che una rappresentazione grafica di qualcosa, incluso un grafo.

I grafi vengono utilizzati in diverse branche della scienza e della tecnologia, come in biochimica, nello studio delle interazioni in teoria quantistica dei campi, nello studio delle reti informatiche, nello studio delle topologie nei database geografici e, tra le altre infinità numerabili di cose, anche nel web, in particolare nei social network come Facebook e Linkedin e nel modello di Google per il suo motore di ricerca.

GRAFO DI UN SITO: PERCHÉ È IMPORTANTE

Come detto all’inizio dell’articolo, conoscere il grafo di un sito internet ci aiuta a capire come esso è strutturato, ci indica quali sono le pagine con più valore e di conseguenza ci aiuta a capire quali strategie SEO utilizzare. Ad esempio, possiamo scoprire che la pagina “chi sono” è quella che ha più valore nel nostro sito. Cosa facciamo? Cerchiamo di adottare soluzioni che diano più importanza ad un’altra pagina? o sfruttiamo questa? Ma un’altra informazione che può darci la struttura a grafo di un sito internet è la bontà delle connessioni tra le varie pagine interne.

FACCIAMO UN ESEMPIO CON UN’ANALOGIA

Consideriamo tre stazioni ferroviarie: Milano, Bologna, Bari.

La rete ferroviaria che le collega è rappresentata da una linea spezzata: ogni tratto (ogni segmento o arco) unisce due punti, chiamati nodi. Questi nodi non sono altro che le stazioni intermedie, tra cui le stazioni di Milano, Bologna e Bari sono dei nodi.

Bari è un nodo che avrà le sue diramazioni verso tratte regionali e nazionali. Idem Bologna e Milano. Ma le tre stazioni sono importanti in egual misura? Ovviamente la risposta è no!

Bologna è un importante snodo fra tratte nazionali: se da Bari voglio arrivare a Milano devo passare per la stazione di Bologna, che è quindi più importante della stazione di Bari.

Bologna è quindi un nodo più importante rispetto al nodo Bari.

Milano ha un’importanza ancora maggiore perché è uno snodo verso tratte estere.

Per valutare l’importanza di una stazione ci chiediamo quindi:

  • quali sono gli snodi regionali?
  • quali gli snodi nazionali?
  • quali quelli esteri?

Analogamente, la stessa cosa vale per il nostro sito.

  • Quali sono le connessioni interne del sito? (le connessioni regionali, in analogia con la rete ferroviaria)
  • Quali sono le connessioni esterne del sito, ossia verso siti esterni? (connessioni nazionali e internazionali)
  • Quali sono i nodi (siti) interni più importanti?
  • Quanto sono importanti i nodi (siti) esterni a cui mi collego? Sono tanti?

Ora è più chiara l’importanza della valutazione del grafo di un sito internet.

ANDIAMO NEL DETTAGLIO

Un articolo bellissimo di Enrico Altavilla, spiega come calcolare la distribuzione del PageRank, mostrando come alla base di questa valutazione vi sia la la struttura a grafo di un sito internet. Nell’articolo inoltre viene spiegata l’utilità di questo tipo di analisi, soprattutto a livello SEO, descrivendo una procedura non tanto complessa.

Le procedure di analisi sono complesse e per spiegarne il senso spesso si cerca di semplificare, cosa che farò nel seguito dell’articolo. Tuttavia è una buona base per approfondire il tema in futuro. Lo scopo in questo articolo è mostrare una semplificazione della procedura di Enrico Altavilla tramite un mio codice scritto in linguaggio Python, molto semplificato e che va ottimizzato in alcuni aspetti tecnici e numerici.

  1. Estrarre tutti i link interni ed esterni di un sito
  2. Creare il grafo di un sito: una serie di nodi e archi dove:
    • i nodi sono i link del sito
    • gli archi sono le connessioni di ogni link interno con tutti gli altri link
  3. Calcolare qualcosa simile al PageRank, chiamato Eigenvector Centrality, per ogni risorsa del sito
  4. Creare una rappresentazione grafica del grafo.

L’analisi andrebbe fatta nel dettaglio, valutando link con tag nofollow, valutazione dei link esterni, ed eventuali filtraggi e calcoli: mi riprometto di riaggiornare l’articolo non appena ne avrò l’occasione.

 

COSA CI SERVE

 

IL CODICE IN PYTHON PER VALUTARE IL GRAFO DI UN SITO INTERNET

(il codice completo lo trovi a fine articolo)

Il codice viene eseguito nel modulo principale: main.

dove la prima riga esegue il parsing della sitemap, fornendo come risultato un dizionario ed una lista, ossia:

  • graph, dizionario dove ogni chiave è un url della nostra sitemap e il corrispondente valore è una lista contenente le url collegate ad esso (link interni a cui rimanda).
  • siteLink, lista di tutti gli url della sitemap

Questa operazione viene effettuata dal modulo getGraph()

la riga

esegue un parsing della sitemap fornita. Successivamente per ogni url della sitemap viene effettuato un parsing html (url k) tramite

sfruttando la liberia beautiful soup (bs4). Le funzioni getChild() e getLink() sono esposte a fine articolo

La funzione fa una distinzione tra le sitemap tipiche fornite dal plugin Yoast WordPresse le sitemap fornite da siti implementati in Joomla.

In particolare una sitemap di Yoast è sviluppata come un albero di file xml:

  • sitemap_index.xml
    • post-sitemap.xml

      • url 1
      • url 2
    • page-sitemap.xml

      • url 3
      • url 4
    • portfolio-sitemap.xml

    • category-sitemap.xml

    • e così via…

Le sitemap fornite dai componenti per Joomla invece sono del tipo:

  • sitemap.xml
    • url 1
    • url 2
    • url 3
    • url 4
    • ….

Ritorniamo al modulo main. Dopo aver estratto url e link, passiamo a crearci il grafo del sito. Lo facciamo tramite la libreria networkx, importata con l’abbreviazione nx.

generateNodes() e generateEdges() sono i moduli tramite i quali vengono estratti i nodi e gli archi secondo il formato richiesto da networkx.

Successivamente ci calcoliamo i valori di Eigenvectors Centrality

quindi scriviamo su file csv sia i valori di Eigenvectors Centrality, sia i gradi di ogni nodo

Infine impostiamo i parametri di plottaggio per ottenere una rappresentazione grafica del grafo del sito in esame, salvandola in alta risoluzione su file pdf

GRAFO DI UN SITO INTERNET: CODICE COMPLETO

NOTA: il codice è molto semplice e l’ho scritto velocemente a titolo di esempio. Tuttavia sono ben accetti suggerimenti!

Lancio del codice (esempio)

File main.py

 

 


CHIEDI UN PREVENTIVO GRATUITO

Chiedi un preventivo per realizzare il tuo sito internet, per una consulenza SEO, lo sviluppo di un software o per realizzare una soluzione tecnologica.

Condividi se ti piace...