Analizzare lista di URL con Python

Aggiornato il 02 Gennaio 2022 alle 16:28 • Tempo di lettura: 3 minuti • Autore: Michele Sabatini

Ho deciso di scrivere questo articolo perché ultimamente mi sto dilettando nella programmazione in Python, linguaggio di programmazione che sto sempre più apprezzando per la sua semplicità di utilizzo rispetto ad altri linguaggi come il PHP.

Sotto alcuni punti di vista, soprattutto per lo scraping e operazioni di “request” è molto più veloce rispetto al PHP, almeno questo è quello che ho potuto constatare nei miei test.

import requests

def get_status_code(url):
    try:
      richiesta = requests.get(url)
      print ("Processato " + url)

      if len(r.history) > 0:
        catena = ""
        code = r.history[0].status_code
        url_finale = richiesta.url
        for resp in richiesta.history:
          catena += resp.url + " | "
        return str(code) + '\t' + str(len(richiesta.history)) + '\t' + catena + '\t' + url_finale + '\t'
      else:
        return str(richiesta.status_code) + '\t\t\t\t'
    except requests.ConnectionError:
      print("Errore: non sono riuscito a connettermi.")
      return '0\t\t\t\t'


input_file = 'urls.txt'
output_file = 'output.txt'

with open(output_file, 'w') as o_file:
    o_file.write('URL\tStato\tNumero di Redirect\tCatena Redirect\tURL Finale\t\n')
    f = open(input_file, "r")
    lines = f.read().splitlines()
    for line in lines:
        code = get_status_code(line)
        o_file.write(line + "\t" + str(code) + "\t\n")
    f.close()

Andiamo ad analizzare il codice, blocco per blocco.

Partiamo con il codice!

Abbiamo bisogno delle seguenti librerie

import requests

Se non hai la libreria installata, puoi farlo tramite il comando

pip install requests

In questa parte del codice andiamo a delineare la funzione che verrà lanciata nel main del nostro script in Python.

def get_status_code(url):
    try:
      richiesta = requests.get(url)
      print ("Processato " + url)

      if len(richiesta.history) > 0:
        catena = ""
        code = richiesta.history[0].status_code
        url_finale = richiesta.url
        for resp in richiesta.history:
          catena += resp.url + " | "
        return str(code) + '\t' + str(len(richiesta.history)) + '\t' + catena + '\t' + url_finale + '\t'
      else:
        return str(richiesta.status_code) + '\t\t\t\t'
    except requests.ConnectionError:
      print("Errore: non sono riuscito a connettermi.")
      return '0\t\t\t\t'

Quello che andiamo a fare è molto semplice. Sfruttando la libreria requests analizziamo l’URL che abbiamo tra i parametri della funzione ed il risultato finale che faremo tornare sarà una stringa contenete tutte le informazioni di quel singolo URL, se ci sono delle catene di redirect o lo stato dell’URL (se raggiungibile o se restituisce qualche altro status code).

Poi andiamo ad istanziare le variabili per il file di input e quello di output.

  • Quello di input avrà al suo interno una lista di URL.
  • L’output sarà un file .txt di appoggio che conterrà il risultato del nostro check.
input_file = 'urls.txt'
output_file = 'output.txt'

Infine andiamo a scrivere il codice che andrà ad aprire il nostro file e analizzerà riga per riga, quindi URL per URL.

with open(output_file, 'w') as o_file:
    o_file.write('URL\tStato\tNumero di Redirect\tCatena Redirect\tURL Finale\t\n')
    f = open(input_file, "r")
    lines = f.read().splitlines()
    for line in lines:
        code = get_status_code(line)
        o_file.write(line + "\t" + str(code) + "\t\n")
    f.close()

Alla fine nella nostra directory avremo un file “ouput.txt” che conterrà tutte le informazioni della nostra analisi.

Semplice e veloce. Senza troppi giri di parole.

Buona SEO 🙂

Michele.

Michele Sabatini Aggiornato il 02 Gennaio 2022 alle 16:28

Michele Sabatini
info@michelesabatini.it
Amo testare e analizzare i dati. Da anni mi occupo di SEO per clienti, agenzie e progetti personali. Sperimentare nuove strategie e migliorare l’esperienza dell’utente all’interno di un sito web è fondamentale al giorno d’oggi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Informazioni