Come creare un BOT per lo scraping dei siti web in Python

In questo articolo andiamo a vedere come creare un programma in Python che effettua lo scraping di un sito web di e-commerce.

Lo scraping è una tecnica secondo la quale lo sviluppatore scrive un programma che non fa altro che navigare su un sito web come se fosse una persona reale a farlo e ne estrapola le informazioni necessarie per effettuare poi calcoli o semplicemente comunicarle al programmatore.

1. Perché dovrei aver bisogno di fare scraping?

Ci possono essere infinite ragioni per cui uno sviluppatore decide di fare scraping su un determinato sito, generalmente lo si fa nei casi in cui necessitiamo di alcune informazioni (es. commenti sotto a un video di YouTube) ma non abbiamo il modo di collegarci direttamente al database che contiene quelle informazioni.

Un altro scenario molto interessante in cui lo scraping potrebbe portare enormi benefici è lo scenario in cui dobbiamo ad esempio tenere monitorato un certo prodotto sul nostro store di e-commerce preferito.

Mettiamo caso che il prodotto in questione non è al momento disponibile ed io voglio immediatamente sapere quando tornerà disponibile posso scrivere un programma che ogni tot tempo vada a visitare la pagina del prodotto in questione per verificarne la disponibilità.

Schema funzionamento scraper

Da notare come il nostro scraper interagisce solo ed esclusivamente con il sito web e non ha nessun collegamento diretto con il database che contiene i dati mostrati nel sito.

2. Il nostro piccolo scraper

Lo scraper che andremo a scrivere in questo articolo non fa altro che visitare una pagina di un e-commerce di test una volta ogni ora per poi salvare in un file tutti i prodotti che ha trovato con relativa descrizione e prezzo di vendita.

Il risultato finale sarà quindi un file testuale (.txt) contenente tutte le rilevazioni effettuate dal programma con relativa data ed ora della singola rilevazione.

3. Tecnologie utilizzate

Come probabilmente avrai intuito anche dal titolo di questo articolo andremo a sviluppare il nostro script utilizzando il linguaggio Python.

Un appunto interessante da fare riguarda le librerie che andremo ad utilizzare per questo piccolo progetto. Sono librerie molto utilizzate in ambito lavorativo e quindi imparare a familiarizzarci un po’ non fa mai male

  • requests: libreria per richieste http
  • BeautifulSoup: libreria per gestire ed effettuare operazioni su pagine web
  • pandas: libreria di data frame utilissima per immagazzinare, gestire e presentare grandi quantità di dati

4. Passiamo al codice

Il sito del quale effettueremo lo scraping è un sito di test creato appositamente per effettuare prove.

https://webscraper.io/test-sites/e-commerce/allinone/phones/touch

Nulla vi vieta di riadattare lo script per poter farlo funzionare anche su altri siti di e-commerce reali.

Il nostro progetto si comporrà di una cartella contente 2 file Python ed un file di testo

struttura del nostro progetto

Il file “results.txt” possiamo anche non crearlo direttamente noi in quanto verrà generato dallo script una volta eseguito.

Qui di seguito incollo il codice del file main.py, i commenti nel codice dovrebbero far capire ogni singolo passaggio che cosa fa.

from scraping import scraping
import time

def main():
    while True:
        scraping()
        time.sleep(3600) # attendi 1 ora (3600 secondi)



# chiamata della funzione "main" quando viene eseguito il programma
if __name__ == "__main__":
    main()

Questo file si occupa sostanzialmente di lanciare ogni 3600 secondi (1 ora) la funzione (contenuta in scraping.py) che andrà a fare lo scraping del sito e salverà i dati nel file results.txt.

Qui di seguito il codice del file scraping.py:

# importazione delle librerie
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
import datetime

def scraping():

    # url dal quale estrapolare i dati
    url = 'https://webscraper.io/test-sites/e-commerce/allinone/phones/touch'

    # chiamata in GET della pagina web
    r = requests.get(url)

    # parsing del contenuto in formato più leggibile
    soup = bs(r.content, 'html.parser')

    # get della lista di tutti i prodotti nella pagina
    product_list = soup.find_all("div", class_="thumbnail")

    #istanziamento della variabile che conterrà i dati
    result = {
        "title": [],
        "description": [],
        "price": []
    }

    # per ogni prodotto trovato vado a prendermi le proprietà
    # che mi servono e le inserisco nella apposita lista
    # del dizionario creato prima
    count = 0
    for product in product_list:
        title = product.find(class_="title").text
        description =  product.find(class_="description").text
        price =  product.find(class_="price").text

        result["title"].append(title)
        result["description"].append(description)
        result["price"].append(price)
        count += count

    # parsing del dizionario in un dataframe
    data_frame = pd.DataFrame(data=result)

    # stampa del data frame a video
    print(data_frame)

    # salvataggio del dataframe in un file
    file = open("results.txt", "a+")
    file_content = datetime.datetime.now().isoformat() + "\n\n"
    file_content += data_frame.to_string()
    file_content += "\n********************************** \n\n\n"
    file.write(file_content)

In parole povere questo algoritmo di scraping va a cercare all’interno della pagina web tutti gli elementi HTML che hanno una determinata classe associata (la classe che identifica i prodotti).

Successivamente per ogni prodotto trovato vengono salvate le informazioni di titolo, descrizione e prezzo.

Infine viene generato il dataframe di pandas con i dati raccolti che verrà salvato nel file results.txt

Qui di seguito incollo il contenuto del file results.txt al termine dell’esecuzione dello script

2021-01-09T09:00:10.657981

            title             description    price
0       Nokia 123           7 day battery   $24.99
1      LG Optimus             3.2" screen   $57.99
2  Samsung Galaxy      5 mpx. Android 5.0   $93.99
3         Nokia X  Andoid, Jolla dualboot  $109.99
4     Sony Xperia         GPS, waterproof  $118.99
5     Ubuntu Edge          Sapphire glass  $499.99
6          Iphone                   White  $899.99
7          Iphone                  Silver  $899.99
8          Iphone                   Black  $899.99
********************************** 


2021-01-09T09:00:16.202434

            title             description    price
0       Nokia 123           7 day battery   $24.99
1      LG Optimus             3.2" screen   $57.99
2  Samsung Galaxy      5 mpx. Android 5.0   $93.99
3         Nokia X  Andoid, Jolla dualboot  $109.99
4     Sony Xperia         GPS, waterproof  $118.99
5     Ubuntu Edge          Sapphire glass  $499.99
6          Iphone                   White  $899.99
7          Iphone                  Silver  $899.99
8          Iphone                   Black  $899.99
********************************** 


2021-01-09T09:00:21.836898

            title             description    price
0       Nokia 123           7 day battery   $24.99
1      LG Optimus             3.2" screen   $57.99
2  Samsung Galaxy      5 mpx. Android 5.0   $93.99
3         Nokia X  Andoid, Jolla dualboot  $109.99
4     Sony Xperia         GPS, waterproof  $118.99
5     Ubuntu Edge          Sapphire glass  $499.99
6          Iphone                   White  $899.99
7          Iphone                  Silver  $899.99
8          Iphone                   Black  $899.99
********************************** 


2021-01-09T09:00:27.474911

            title             description    price
0       Nokia 123           7 day battery   $24.99
1      LG Optimus             3.2" screen   $57.99
2  Samsung Galaxy      5 mpx. Android 5.0   $93.99
3         Nokia X  Andoid, Jolla dualboot  $109.99
4     Sony Xperia         GPS, waterproof  $118.99
5     Ubuntu Edge          Sapphire glass  $499.99
6          Iphone                   White  $899.99
7          Iphone                  Silver  $899.99
8          Iphone                   Black  $899.99
********************************** 

Come possiamo notare otteniamo una sorta elenco di tabelle contenente tutti i prodotti ed in cima ad ogni tabella è presente la data e l’ora della rilevazione. In questo caso per generare l’esempio ho lanciato lo script impostando come intervallo di tempo 5 secondi tra una rilevazione e l’altra.

5. Conclusioni

Abbiamo visto come è possibile creare un piccolo scraper utilizzando Python.

Adesso che hai le conoscenze base per creare i tuoi scraper personalizzati puoi dare libero sfogo alla fantasia.

Se qualche passaggio ti sfugge o hai incontrato qualche problema non esitare a lasciare un commento qui sotto.

ciao e alla prossima 🙂

25 Replies to “Come creare un BOT per lo scraping dei siti web in Python”

  1. Ciao, vorrei approfondire l argomento bot per comprare sui siti, puoi dirmi qualche libro o sito su cui approfondire? Grazie

  2. Ciao.
    Ho provato a far girare questo interessante programma, ma non mi crea il file results.txt.
    Phyton 3.9 – Windows 10.
    Cosa posso provare a modificare?
    Grazie.

    • Ciao, visto così non saprei dirti da cosa dipende il problema … scrivimi una mail e magari organizziamo una call dove ti do una mano

  3. ciao ho letto la tua guida e l’ho trovata molto interessante ho studiato programmazione ma non mi sono mai messo a scrivere codice solamente a scuola, però volevo iniziare e avevo bisogno di una spinta e un aiuto per scrivere il codice per creare un bot, se magari sei disposto ad aiutarmi sono pronto ad imparare

    • Ciao, potrei darti degli esercizi da fare … se invece hai bisogno di lezioni private scrivimi una mail e ci mettiamo d’accordo

  4. ciso fabio, ho bisogno di un bot che semplicemente ogni tot entri nel mio sito. insomma mi serve semplicemente che ogni ora entri e faccia capire al sito fhe qualcuno ha efettuato l accesso al sito come faccio?

  5. via fabio, volevo chiederti per quanto riguarda i bot per prendere le scarpe se è difficile programmarli o no.
    In caso tu sappia crearli se mi potessi fare una mano con il mio primo BOT.

  6. Ciao volevo capire se è possibile performare lo scraping per cercare le offerte più basse all’interno di un sito di offerte di viaggi. Ovviamente effettuando ricerca ogni ora o ogni giorno su un periodo di tempo variabile.

    • Ciao, si è possibile farlo ovviamente non è un lavoro facile e richiede tanto tempo e tanta abilità. Se vuoi mandami una mail e ti faccio proposta di preventivo.

  7. Ciao, volevo fare un bot per comprare i biglietti di un concerto? Potresti spiegarmi i passaggi nell’email, grazie se lo farai

    • Ciao chiara, purtroppo non è possibile spiegare in una mail i passaggi per costruire un BOT del genere, dipende da innumerevoli fattori variabili

  8. Ciao, vorrei iniziare a creare un bot che automatizzi un acquisto su un qualche sito attraverso i blockchain e ad un determinato acquisto cambi indirizzo e ricompri il prodotto secondo te è fattibile ?

Lascia un commento

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

*