Mercoledì, 19 Dicembre 2018 11:12

Occorrenze di una pagina web con Python

Scritto da

Vogliamo simulare una sorta di browser web stile firefox o chrome, che ci prelevi quindi una pagina web. Ora, invece che vederla con gli occhi umani, vogliamo darla in pasto al nostro script python ad esempio per valutare la presenza di parole particolari.

Vi siete mai chiesti come fanno ad apparire pubblicità su misura a quello che vi interessa? In realtà è molto facile, con tecniche di Data Science, possiamo istruire oppurtuni software per intercetatre quello che leggete e vedete sul web e quindi usare queste informazioni per scopi commerciali.

Proviamo quindi a simulare la prima parte di queste procedure, scaricando una pagina web e contando se e quante volte compaiono delle parole selezionate in una opportuna lista. Quindi mostriamo un grafico istogramma con gli esisti. Figure professionali che si occupino di queste analisi sono sempre più ricercate e come programmatori Python abbiamo una marcia in più. Esaminiamo il codice frammento per frammento. Potete eseguirlo o su IDLE ma potreste avere qualche noia con le libreire mancanti (da installare con il comando pip), oppure su Repl.it nella sezione Tkinter che vi permette di fare anche oggetti grafici oltre la classica console.

Tolto il commento iniziale, le librerie che ci servono sono la http per gestire le richieste al server e scaricare la nostra pagina  e la matplotlib che occorre per effettuare il disegno grafico. Per semplicità le rinominiamo con la parola riservata as. A questo punto, scegliamo un sito web da analizzare. Le due righe conenssione servono a simulare una richiesta GET del protocollo HTTP che preleva la pagina con tanto di risposta del server. Qui scegliamo di esplicitare /index.php, ma potrebbe bastare il solo carattere / per prelevare la prima pagina principale.

'''
Simuliamo il comportamento di un browser
con Python e conteggiamo le occorrenza
di alcune parole in una pagina
'''

import http.client as browser
import matplotlib.pyplot as plot

sito = "www.iisteramo.edu.it"

connessione = browser.HTTPConnection(sito,80)
connessione.request("GET", "/index.php")

A questo punto, efefttuata la conenssione rpeleviamo la risposta. Il server risponde sempre con uno status che può essere un numero 100, 200, 300,400, 500. Vi rimando ad altro articolo per approfindire le tipologie di status. Qui ci basta ricordare che il successo è 200,la pagina mancante il famoso 400 o 404. Se ovviamente la conenssion e è ok, scarico la pagina con il comando read. quindi chiudiamo la conenssione.

risposta = connessione.getresponse()

'''
200 ok
300 redirect
400 risorsa mancante
500 errore di configurazione del server
'''
pagina = ''

if risposta.status == 200:
  pagina = risposta.read()
else:
  print(risposta.status)
    
connessione.close()

 

A questo punto, convertiamoci la pagina in stringa e andiamola a stampare. Possiamo gia utilizzare il comando count per contare quante volte compare una singola parola. Per fare un lavoro più realistico, creiamo una lista di parole che vogliamo controllare ed un vettore vuoto per inserirci quante volte queste parole compariranno nella pagina. Il ciclo è molto semplice ed intuitivo per cui  per ogni parola del vettore cerca, conto quante volte compare e lo annoto aggiungendo un elemento in occorrenze.

paginahtml =str(pagina)
#print(paginahtml)
#print(paginahtml.count("offerta"))

cerca=["Nardini", "scuola", "pippo"]
occorrenze = []
for parola in cerca:
  n = paginahtml.count(parola)
  print(parola, n)
  occorrenze.append(n)
 

Non ci resta che disegnare il tutto con un istrogramma i valori trovati

plot.bar(cerca, occorrenze)
plot.show()

 

Il codice completo:

'''
Simuliamo il comportamento di un browser
con Python e conteggiamo le occorrenze
di alcune parole in una pagina
'''

import http.client as browser
import matplotlib.pyplot as plot

sito = "www.iisteramo.edu.it"

connessione = browser.HTTPConnection(sito,80)
connessione.request("GET", "/index.php")
risposta = connessione.getresponse()

'''
200 ok
300 redirect
400 risorsa mancante
500 errore di configurazione del server
'''
pagina = ''

if risposta.status == 200:
  pagina = risposta.read()
else:
  print(risposta.status)
    
connessione.close()

paginahtml =str(pagina)
#print(paginahtml)

cerca=["Nardini", "scuola", "pippo"]
occorrenze = []
for parola in cerca:
  n = paginahtml.count(parola)
  print(parola, n)
  occorrenze.append(n)

plot.bar(cerca, occorrenze)
plot.show()
Letto 461 volte
Prof. Alfredo Centinaro

Docente di "Scienze e tecnologie informatiche", "Tecnologie e progettazione di sistemi informatici", "Sistemi e Reti" presso IIS Alessandrini-Marino (Teramo), consulente e sviluppatore web. Ha collaborato per anni come sviluppatore presso MHT - Treviso, assistente Sistemi ed elaborazione dell'informazione in UniTE Corso di laurea in Scienze del turismo culturale, tutor presso Telecom Italia Learning Services (L'Aquila)

Joomla SEF URLs by Artio