≡ Menu

In un caldo giorno d’Agosto, l’aria è impregnata di un calore soffocante e afoso, una calura che sembra stringere la terra in una morsa silenziosa. Le voci del giorno sussurrano languide, stanche dalla lotta con l’implacabile abbraccio del sole. Ma l’orizzonte comincia a fremere, a turbarsi con un palpito impercettibile. Le nuvole, prima lontane e innocue, avanzano come un esercito sordo, e l’ombra di un cambiamento si stende lentamente sulla terra assetata.
Il vento, prima assente, sorge con un sospiro gelido, come se trae respiro dalle profondità del mare. Le foglie delle alberature si agitano, scuotendosi dal torpore estivo, e l’aria si riempie del profumo di un imminente ristoro.
E poi, in un istante sospeso, una magia silenziosa: il primo ticchettio della pioggia sull’ombrellone, timido come un bacio rubato. Il sole, fino a quel momento sovrano incontrastato, è oscurato da un sipario di nuvole grigie, un velo che copre l’ardore della sua fiamma. Le gocce diventano una melodia, una canzone d’amore tra cielo e terra. La pioggia lava via l’arsura, accarezza la pelle dei presenti, bagna la terra arida. È un canto armonico, un ritorno alla vita, una danza fra gli elementi.
In questa pioggia d’Agosto, tutto parla, tutto canta, e il mondo sembra ritrovare un ordine più profondo, una bellezza nascosta. È un attimo fuori dal tempo, un sussurro della natura che racchiude in sé l’eternità.

{ 0 comments }

Web scraping is a technique that allows extracting and processing large amounts of unstructured data from the web through automated scripts that analyze the HTML structure of pages to identify and acquire the desired information; it allows quickly obtaining large amounts of online data for research, monitoring and data analytics, for example by extracting all prices and descriptions from an e-commerce site; the core Python libraries for scraping are Requests to download page content, BeautifulSoup to analyze HTML, and Selenium to handle dynamic pages with JavaScript; with BeautifulSoup it is possible to navigate the HTML as a tree of objects, searching and finding elements through tags, id, class and attributes; for scraping sites with multiple pages, loops can be used that visit each URL in automatic sequence; by adopting best practices with these tools it is possible to create effective, scalable and automated scraping scripts to extract and process large volumes of unstructured data for research, monitoring and data analytics purposes.


Il web scraping è una tecnica fondamentale per raccogliere ed elaborare grandi quantità di dati dal web. In questo articolo analizzeremo in dettaglio i concetti chiave, le migliori pratiche e gli strumenti necessari per iniziare a fare web scraping in modo efficace.

Cos’è il web scraping

Il web scraping consiste nell’estrarre e raccogliere dati da pagine web tramite script automatizzati. Funziona analizzando la struttura HTML delle pagine per identificare e acquisire le informazioni desiderate.

Il principale vantaggio dello scraping è la possibilità di ottenere velocemente un grande volume di dati non strutturati da fonti online per scopi di ricerca, monitoraggio, data analytics. Ad esempio, è possibile estrarre tutti i prezzi e le descrizioni da un e-commerce per analizzarne le dinamiche nel tempo.

Preparazione dell’ambiente

Per iniziare a fare web scraping in Python, è necessario installare alcune librerie fondamentali:

  • Requests: permette di scaricare il contenuto HTML delle pagine web
  • Beautiful Soup: analizza l’HTML e permette di estrarre facilmente dati selezionati
  • Selenium: per interagire con pagine web dinamiche che richiedono l’esecuzione di codice JavaScript

Si possono installare tramite il comando pip:

pip install requests beautifulsoup4 selenium

Scraping di base con Requests e BeautifulSoup

Importiamo le librerie necessarie:

import requests 
from bs4 import BeautifulSoup

Scarichiamo il contenuto HTML di una pagina con Requests:

url = 'https://example.com'
response = requests.get(url)

Analizziamolo con BeautifulSoup per estrarre il titolo e i paragrafi:

soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.text 
paragraphs = soup.find_all('p')

E scriviamo i dati estratti su file CSV per un’ulteriore elaborazione:

import csv
with open('output.csv', 'w') as file:
    writer = csv.writer(file)
    writer.writerow([title])
    for p in paragraphs:
        writer.writerow([p.text])

Navigazione nella struttura HTML

BeautifulSoup mette a disposizione una serie di metodi per scorrere ed esplorare l’HTML come albero ad oggetti:

  • find() ricerca il primo elemento corrispondente
  • find_all() restituisce tutti gli elementi corrispondenti

Ad esempio, per estrarre tutti i link di una pagina:

links = soup.find_all('a')
for link in links:
   print(link['href'])

È possibile ricercare elementi tramite id, classe o altri attributi per individuare precisamente i dati desiderati.

Scraping di pagine JavaScript dinamiche

Molti siti web moderni utilizzano JavaScript per generare contenuti e pagine dinamicamente. In questi casi, è necessario Selenium, che consente di controllare un browser web per interagire pienamente con le pagine.

Ad esempio, per caricare una pagina dinamica e cliccare su un pulsante prima di scaricarne il contenuto:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
button = driver.find_element_by_id('load-more')
button.click()
html = driver.page_source
soup = BeautifulSoup(html)

Gestione di pagine multiple

Per scaricare dati da siti web con più pagine, è possibile realizzare script che visitano ogni URL utilizzando cicli e paginazione automatica.

Ad esempio, per estrarre prodotti da un e-commerce con più pagine:

import requests
from bs4 import BeautifulSoup
base_url = 'https://example.com/products?page='
final_page = 10
for x in range(1, final_page+1):
    print(f'Page {x}')
    url = base_url + str(x)
    
    response = requests.get(url)
    soup = BeautifulSoup(response.text)
    
    products = soup.find_all('div', class_='product')
    
    for product in products:
         name = product.find('h2').text
         print(name)

Come abbiamo visto, il web scraping è una tecnica potente che permette di ottenere ed elaborare grandi moli di dati non strutturati da fonti online. Requisiti fondamentali sono librerie come Requests, BeautifulSoup e Selenium, che consentono di automatizzare il processo di estrazione dati anche da pagine web complesse e dinamiche. Adottando le migliori pratiche illustrate e una strategia strutturata, è possibile realizzare script di scraping efficaci e scalabili per progetti di data analytics, monitoraggio, ricerca e altro ancora.

{ 0 comments }

Nelle notturne strade del ricordo e dell’anima, l’obiettivo del fotografo Martin Usborne ha immortalato un sentimento che trova la sua eco in ciascuno di noi: la solitudine, la paura dell’abbandono e quel barlume di speranza che si cela nel silenzio.

“The Silence of Dogs in Cars” non è un semplice progetto fotografico, ma un viaggio nel profondo dell’essere umano e dell’animale, una simbiosi che va oltre la mera apparenza.

In questi scatti, i cani, relegati nei loro abitacoli notturni, diventano i custodi di un’emozione pura e inespressa, quasi una metafora della nostra stessa esistenza. Ogni sguardo catturato è un ponte verso l’introspezione, una riflessione sulla nostra natura, così vicina a quella dell’animale, eppure così spesso dimenticata.
Martin ha saputo legare il filo invisibile del suo passato con una sensibilità unica, offrendo all’osservatore una visione che va oltre l’immagine. In un mondo sempre più caotico e rumoroso, questi cani ci invitano a fermarci, a riflettere sul silenzio, su quel buio che non è vuoto, ma pieno di vita, di emozioni, di attese.


“The Silence of Dogs in Cars” è un inno alla vulnerabilità, all’umiltà, all’empatia. È un’opera che, con la sua eleganza silenziosa, ci ricorda che anche nel buio più profondo, nel silenzio più assordante, c’è sempre una speranza, un’attesa, un amore incondizionato che ci lega gli uni agli altri, uomini e animali, in un eterno abbraccio dell’anima.

{ 0 comments }

Everywhere…

It’s not the night, it’s not the road. It’s not the fear, nor the desire. It’s not the past, it’s not the memories, the doubts, the vigils, the words you can’t hide in your wrists, the decisions you make and those you’d be better off avoiding. Everywhere is the perfect place, the best spot, the starting point and the destination.

{ 0 comments }

n-narcissistic numbers…


This Python code is designed to find all n-narcissistic numbers for a given value of ( n ). An n-narcissistic number is an n-digit number that is equal to the sum of its own digits each raised to the power of ( n ).

The code consists of a function find_n_narcissistic_numbers(n), which takes an integer ( n ) as input and returns a list of all n-narcissistic numbers up to the specified value.

  1. Upper Bound Calculation: The code first calculates the upper bound for the search, which is the maximum possible n-narcissistic number. This is done by multiplying ( n ) by ( 9^n ), as 9 is the largest digit, and there are ( n ) digits in the number.
  2. Loop Through Potential Numbers: The code then iterates through all numbers from 0 to the upper bound. For each number, it: a. Converts the Number to a List of Digits: This is done by converting the number to a string and then into a list of integers. b. Checks if the Number is n-Narcissistic: The code verifies whether the sum of the digits each raised to the power of ( n ) is equal to the original number, and that the number of digits is equal to ( n ). If both conditions are met, the number is appended to the list of narcissistic numbers.
  3. User Input and Execution: Outside of the function, the code asks the user to input a value for ( n ) and then calls the function to find and print the n-narcissistic numbers.

By employing this approach, the code efficiently finds all n-narcissistic numbers for a given value of ( n ), providing insight into an interesting mathematical concept.

{ 0 comments }

Giornata Mondiale della Fotografia…

Oggi, 19 agosto, è la Giornata Mondiale della Fotografia; e dunque torno a parlarvi dei miei gusti in questo campo. Non vi offro il ritratto di un solo autore, ma un insieme di scatti che risonano con la mia anima. Questa non è una sentenza, ma un viaggio personale, una riflessione che potrebbe trovare eco in ogni collezionista o amante delle immagini.
Le fotografie si dispongono senza ordine nel mio cuore, e lì restano, guide silenziose che educano le mie scelte. Perché le amo? Sarebbe troppo facile dire “mi piacciono” e chiudere la porta. Le trovo complete, in ogni scatto una connessione profonda tra l’artista, l’osservatore e il tempo in cui l’immagine è stata catturata, un tempo che si trasforma in Storia.
Queste immagini costituiscono il mio personale tesoro cognitivo. Non mi faccio illusioni sul fatto che ognuno possa vedere ciò che vedo io. Ogni appassionato ha un mondo negli occhi, ed è giusto che guardi in altre direzioni. Io vi offro il mio, con la delicatezza di chi condivide un pensiero, con la speranza che possiate ritrovarvi in qualche angolo di esso…

{ 0 comments }

La bellezza…

La bellezza si mostra in forme inaspettate. Non è l’immagine riflessa in uno specchio, la perfezione di una scultura, la simmetria di un volto. È un sentimento, una risonanza, un fremito nell’anima. Le smagliature, le rughe, i chili in più sono visti spesso come imperfezioni, ostacoli al sentiero dell’ideale. Ma essi sono, in realtà, segni del nostro cammino, cicatrici delle nostre battaglie, prove del nostro amore.
Gli standard di bellezza, imposti e onnipresenti, sono stati scolpiti con mani fredde, prive di empatia. Ci dicono cosa dovremmo essere, e in questo dictat perdiamo noi stessi. Ma la bellezza non può essere incasellata, non può essere definita o limitata. La bellezza è nel modo in cui ci muoviamo, nel nostro incespicare, nei passi nudi, nei sorrisi imbarazzati. È nelle parole che scegliamo, nelle idee in cui crediamo. È nel brivido di uno sguardo, nel tremore di un gesto. Non possiamo confinare la bellezza in una norma, perché essa è senza confini. È un concerto silenzioso che riecheggia nei cuori e nelle menti di chi sa ascoltare.
Guardiamo oltre la superficie, oltre gli standard. La vera bellezza ci aspetta là, nel profondo dell’essere, nell’intimità del nostro io. Là dove la vita danza e canta, là dove l’amore abbraccia e guarisce, là dove noi siamo veramente noi.

{ 0 comments }

È un libro che ci insegna a navigare dentro l’anima umana, a tracciare il confine labile tra ciò che è reale e ciò che è immaginario. Siamo in una Mosca impregnata di mistero, nel cuore pulsante della Russia, laddove un sedicente professore di magia nera – che altri non è se non il diavolo – trascina il lettore in un viaggio straordinario attraverso il tempo, la storia e le passioni umane. “Il Maestro e Margherita” non è soltanto una narrazione, ma una sinfonia, un ritmo che avanza con la grazia di un danzatore e la forza di un combattente. Bulgakov svela l’anima del popolo russo, le sue paure, le sue aspettative, la sua lotta eterna contro la censura e l’oppressione, in un tempo in cui parlare era un rischio, scrivere un’eresia.

Margherita e il Maestro, due figure che si perdono e si ritrovano, sono il simbolo della creatività e dell’amore che sfidano le convenzioni e le aspettative sociali. Il loro amore è un inno alla libertà dell’essere, un richiamo a quel desiderio profondo di autenticità che risiede in ognuno di noi.

Le parti censurate del romanzo, il suo percorso tormentato dalla stesura alla pubblicazione, non sono che l’eco della lotta di Bulgakov stesso contro un mondo che non voleva ascoltare, che temeva la verità celata nelle parole. La scrittura diventa, quindi, non solo un atto di ribellione, ma una preghiera, un canto di speranza.

In questo romanzo, il gatto Behemot, il diavolo, e le scene di magia sono messaggeri di un mondo che va oltre la ragione, oltre la comprensione. Sono un monito che ci ricorda come la vita sia un intreccio inestricabile di luci e ombre, di bene e male, e come sia nostro dovere accettarlo nella sua interezza.

“Il Maestro e Margherita” è, infine, una lezione sull’arte del narrare, una riflessione profonda sul potere delle parole e sulla responsabilità di chi le usa. È un invito a leggere, a scrivere, a pensare con coraggio, con audacia, con l’ardore di chi sa che le parole possono cambiare il mondo.

Un romanzo per chi ama, per chi sogna, per chi lotta. Un libro che non invecchia, che cresce con noi, che ci accompagna nel nostro cammino, sussurrandoci all’orecchio che la magia esiste, che è dentro di noi, se solo abbiamo il coraggio di cercarla.

{ 0 comments }

SymPy è una libreria open-source di Python dedicata alla matematica simbolica, che permette la manipolazione algebrica di espressioni matematiche senza approssimazioni numeriche. A differenza di altri sistemi di calcolo numerico, SymPy rappresenta i numeri come simboli, consentendo calcoli esatti. Ad esempio, la divisione di 1 per 3 è rappresentata come una frazione 1/3, piuttosto che come un numero decimale approssimato. Utilizzando SymPy, è possibile svolgere operazioni di base come la semplificazione, l’espansione e la fattorizzazione di espressioni matematiche. Ad esempio, per espandere un prodotto notevole si può scrivere:

SymPy è anche in grado di risolvere equazioni algebriche, differenziali e integrali. Per esempio, può risolvere un’equazione differenziale ordinaria del primo ordine:

Inoltre, SymPy offre strumenti avanzati per la geometria, la teoria dei numeri, la combinatoria e molto altro, rendendolo adatto a vari campi scientifici. Con le sue funzionalità per la manipolazione di matrici, è possibile anche lavorare con l’algebra lineare, come nell’esempio seguente:

SymPy è altamente estensibile e personalizzabile, permettendo agli utenti di definire funzioni simboliche personalizzate, creare nuovi tipi di oggetti e interfacciarsi con altre librerie scientifiche di Python. Con un’ampia documentazione e una comunità attiva, SymPy è un potente strumento sia per chi si avvicina alla matematica simbolica per la prima volta, sia per ricercatori e professionisti che necessitano di calcoli simbolici avanzati e precisi.

{ 0 comments }

Nelle vie di New York, tra luci e ombre, si distillano gli sguardi di un uomo che ha visto oltre. Saul Leiter, pittore delle emozioni, artista dei silenzi, ha camminato sul filo sottile tra realtà e sogno, tra visibile e invisibile.

I volumi “All about Saul Leiter” e “Forever Saul Leiter” sono porte aperte sul mondo interiore di un maestro. Pagina dopo pagina, si dispiegano immagini, come foglie al vento, che raccolgono l’anima della strada, il respiro della città, la melodia silenziosa della vita.

Le fotografie a colori, a lungo dimenticate e poi riportate alla luce, sono testimonianze di un amore sincero per l’essenza delle cose. Sono sussurri di autenticità in un mondo che spesso grida, inviti a fermarsi e osservare, tocchi leggeri che ci ricordano di sentire.

C’è una poesia in queste immagini, una lirica visiva che parla al cuore. La pioggia che cade, l’ombrello che danza, il riflesso di un lampione: ogni dettaglio è un verso, ogni colore è un sentimento.

Leiter ha catturato non solo l’immagine, ma l’anima del momento. Ha visto oltre il semplice scatto, oltre la superficie, e ha trovato quella parte ineffabile che sfugge all’occhio ma tocca il cuore.

“All about Saul Leiter” è un ritratto dell’artista, una raccolta che attraversa la carriera e la visione di un uomo che ha saputo vedere oltre. “Forever Saul Leiter” è un ritratto più intimo, una finestra aperta su un mondo familiare e straordinario, reale e sognato.

In un’epoca di fretta e superficialità, l’arte di Leiter ci chiama alla quiete, alla contemplazione. Le sue immagini sono un ponte tra l’artista e chi guarda, un filo sottile che ci connette tutti nella comune esperienza della vita.

Questi volumi sono un tributo a un maestro che ha trasceso le convenzioni, che ha creato un linguaggio visivo unico, che ha ricordato al mondo la bellezza dei dettagli, della semplicità, della leggerezza. Sono un invito a guardare, a sentire, a vivere con gli occhi dell’anima.

{ 0 comments }