Scraping web per articoli di notizie con Python: il modo migliore nel 2024

Pitone, Mar-06-20245 minuti di lettura

Le notizie sono il modo migliore per sapere cosa succede nel mondo. Per gli ingegneri dei dati, gli articoli di cronaca sono uno dei modi migliori per raccogliere quantità surreali di dati. Più dati significano più approfondimenti, e questo è l'unico modo per innovare la nostra tecnologia e portare la nostra umanità a livelli più alti che mai. Ma c'è

Le notizie sono il modo migliore per sapere cosa succede nel mondo. Per gli ingegneri dei dati, gli articoli di cronaca sono uno dei modi migliori per raccogliere quantità surreali di dati. Più dati significano più approfondimenti, e questo è l'unico modo per innovare la nostra tecnologia e portare la nostra umanità a livelli più alti che mai. Ma le notizie sono tantissime ed è umanamente impossibile raccogliere tutti i dati manualmente. Qual è il modo migliore per ottenere automaticamente i dati? La risposta è lo scraping del web per gli articoli di notizie utilizzando Python.

In questo articolo, creeremo un web scraper per raccogliere gli ultimi articoli di notizie da diversi giornali e memorizzarli come testo. Esamineremo le due fasi seguenti per avere un'analisi approfondita di come si svolge l'intero processo.

Introduzione superficiale alle pagine web e all'HTML.Web scraping con Python e la famosa libreria BeautifulSoup.

Non esitate a saltare a qualsiasi sezione per saperne di più su come eseguire lo scraping del web per gli articoli di notizie utilizzando python

Indice dei contenuti

Introduzione di superficie alle pagine web e all'HTML

Se vogliamo prelevare informazioni importanti da un sito web o da una pagina web, è importante sapere come funziona quel sito. Quando si accede a un URL specifico utilizzando un qualsiasi browser web (Chrome, Firefox, Mozilla, ecc.), quella pagina web è una combinazione di tre tecnologie,

HTML (HyperText Markup Language): L'HTML definisce il contenuto della pagina web. È il linguaggio di markup standard per aggiungere contenuti al sito web. Ad esempio, se si desidera aggiungere testo, immagini o qualsiasi altro elemento al proprio sito web, l'HTML aiuta a farlo.

CSS (Fogli di stile a cascata): È utilizzato per lo styling delle pagine web. I CSS gestiscono tutti i disegni visivi che si vedono in un determinato sito web.

JavaScript: JavaScript è il cervello di una pagina web. JavaScript gestisce tutta la logica e le funzionalità della pagina web. Consente quindi di rendere interattivi i contenuti e lo stile.

Questi tre linguaggi di programmazione ci permettono di creare e manipolare gli aspetti di una pagina web.

Suppongo che per questo articolo conosciate le basi di una pagina web e del linguaggio HTML. Alcuni concetti dell'HTML, come i div, i tag, le intestazioni e così via, potrebbero essere molto utili durante la creazione di questo web scraper. Non è necessario conoscere tutto, ma solo le basi del design di una pagina web e del modo in cui le informazioni sono contenute in essa, e siamo pronti a partire.

Scraping di articoli di notizie dal web con BeautifulSoup in Python

Python dispone di diversi pacchetti che consentono di effettuare lo scraping di informazioni da una pagina web. Continueremo con BeautifulSoup perché è una delle librerie Python più famose e facili da usare per lo scraping del web.

BeautifulSoup è la soluzione migliore per analizzare il contenuto HTML di un URL e accedervi con tag ed etichette. Pertanto, sarà conveniente estrarre alcuni pezzi di testo dal sito web.

Con sole 3-5 righe di codice, possiamo fare la magia ed estrarre da Internet qualsiasi tipo di testo del sito web di nostra scelta, il che lo rende un pacchetto facile da usare ma potente.

Partiamo dalle basi. Per installare il pacchetto di librerie, digitate il seguente comando nella vostra distribuzione Python,

pip installare beautifulsoup4

Utilizzeremo anche il "modulo requests", che fornisce a BeautifulSoup il codice HTML di qualsiasi pagina. Per installarlo, digitate il seguente comando nella vostra distribuzione Python,

pip installa le richieste

Questo modulo di richieste ci permetterà di ottenere il codice HTML dalla pagina web e di navigarlo usando il pacchetto BeautfulSoup. I due comandi che renderanno il nostro lavoro molto più facile sono

find_all(elemento tag, attributo): Questa funzione prende come parametri tag e attributi e consente di individuare qualsiasi elemento HTML da una pagina web. Identificherà tutti gli elementi dello stesso tipo. Si può usare invece find() per ottenere solo il primo.

get_text(): Una volta individuato un dato elemento, questo comando consente di estrarre il testo interno.

Per navigare nel codice HTML della nostra pagina web e individuare gli elementi che vogliamo analizzare, possiamo usare l'opzione "ispeziona elemento" facendo clic con il pulsante destro del mouse sulla pagina o semplicemente premendo Ctrl+F. In questo modo è possibile visualizzare il codice sorgente della pagina web.

Una volta individuati gli elementi di interesse, otterremo il codice HTML con il modulo requests e, per estrarre tali elementi, utilizzeremo BeautifulSoup.

Per questo articolo, utilizzeremo il giornale inglese EL Paris. Scatteremo i titoli degli articoli dalla prima pagina e poi il testo.

Se ispezioniamo il codice HTML degli articoli di notizie, vedremo che l'articolo in prima pagina ha una struttura come questa,

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

importare le richieste
da bs4 importa BeautifulSoup

Una volta ottenuto il contenuto HTML tramite il modulo requests, possiamo salvarlo nella variabile coverpage:

# Richiesta
r1 = requests.get(url)
r1.status_code
 
# Salveremo in coverpage il contenuto della copertina
frontespizio = r1.content

Quindi, definiamo la variabile soup,

# Creazione della zuppa
soup1 = BeautifulSoup(coverpage, 'html5lib')

Nella seguente riga di codice, individueremo gli elementi che stiamo cercando,

# Identificazione delle notizie
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

Utilizzando final_all, si ottengono tutte le occorrenze. Pertanto, deve restituire un elenco in cui ogni elemento è un articolo,

Per poter estrarre il testo, utilizzeremo il seguente comando:

coverpage_news[4].get_text()

Se si vuole accedere al valore di un attributo (nel nostro caso, il link), si può usare il seguente comando,

coverpage_news[4]['href']

Questo ci permetterà di ottenere il link in chiaro.

Se avete afferrato tutti i concetti fino a questo punto, potete effettuare il web scrape di qualsiasi contenuto di vostra scelta.

Il passo successivo prevede l'accesso a ciascun contenuto dell'articolo con l'attributo href, l'acquisizione del codice sorgente per trovare i paragrafi nel codice HTML e infine l'acquisizione con BeautifulSoup. È lo stesso processo descritto sopra, ma dobbiamo definire i tag e gli attributi che identificano il contenuto dell'articolo.

Il codice per la funzionalità completa è riportato di seguito. Non spiegherò ogni riga separatamente, poiché il codice è commentato; si può capire chiaramente leggendo i commenti.

numero_di_articoli = 5
# Elenchi vuoti per contenuti, link e titoli
news_contents = []
list_links = []
list_titles = []
 
per n in np.arange(0, numero_di_articoli):
    
   # solo articoli di notizie (ci sono anche album e altre cose)
   se "inenglish" non è in coverpage_news[n].find('a')['href']:  
       continua
    
   # Ottenere il link dell'articolo
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Ottenere il titolo
    titolo = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # Leggere il contenuto (è diviso in paragrafi)
    articolo = richieste.get(link)
    articolo_contenuto = articolo.contenuto
    soup_article = BeautifulSoup(article_content, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # Unificare i paragrafi
    lista_paragrafi = []
   per p in np.arange(0, len(x)):
        paragrafo = x[p].get_text()
        list_paragraphs.append(paragrafo)
        articolo_finale = " ".join(lista_paragrafi)
        
    news_contents.append(final_article)

Inseriamo gli articoli estratti nel seguente schema:

  • Un set di dati che immette i modelli (df_features).
  • Un set di dati con il titolo e il link (df_show_info).
# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features
df_show_info

Per definire una migliore esperienza utente, misureremo anche il tempo che uno script impiega per ottenere le notizie. A tale scopo definiremo una funzione e la chiameremo. Anche in questo caso, non spiegherò ogni riga di codice, poiché il codice è commentato. Per capire meglio, potete leggere i commenti.

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

Qual è il miglior proxy per lo scraping del web di articoli di notizie con Python?

ProxyScrape è uno dei più popolari e affidabili fornitori di proxy online. I tre servizi proxy includono server proxy dedicati ai centri dati, server proxy residenziali e server proxy premium. Quindi, qual è la migliore soluzione possibile per il miglior proxy HTTP per il web scraping di articoli di notizie con python? Prima di rispondere a questa domanda, è meglio vedere le caratteristiche di ciascun server proxy.

Un proxy dedicato per datacenter è più adatto per attività online ad alta velocità, come lo streaming di grandi quantità di dati (in termini di dimensioni) da vari server a scopo di analisi. È uno dei motivi principali per cui le organizzazioni scelgono i proxy dedicati per trasmettere grandi quantità di dati in breve tempo.

Un proxy dedicato per datacenter ha diverse caratteristiche, come la larghezza di banda illimitata e le connessioni simultanee, i proxy HTTP dedicati per facilitare la comunicazione e l'autenticazione IP per una maggiore sicurezza. Con un uptime del 99,9%, potete essere certi che il datacenter dedicato funzionerà sempre durante qualsiasi sessione. Infine, ma non meno importante, ProxyScrape fornisce un eccellente servizio clienti e vi aiuterà a risolvere i vostri problemi entro 24-48 ore lavorative. 

Il prossimo è un proxy residenziale. Quello residenziale è il proxy ideale per tutti i consumatori. Il motivo principale è che l'indirizzo IP di un proxy residenziale assomiglia all'indirizzo IP fornito dall'ISP. Ciò significa che ottenere il permesso dal server di destinazione per accedere ai suoi dati sarà più facile del solito. 

L'altra caratteristica del proxy residenziale di ProxyScrapeè la funzione di rotazione. Un proxy a rotazione vi aiuta a evitare un divieto permanente sul vostro account perché il proxy residenziale cambia dinamicamente il vostro indirizzo IP, rendendo difficile per il server di destinazione verificare se state usando un proxy o meno. 

Oltre a questo, le altre caratteristiche di un proxy residenziale sono: larghezza di banda illimitata, insieme alla connessione concorrente, proxy HTTP/s dedicati, proxy in qualsiasi sessione di tempo grazie agli oltre 7 milioni di proxy presenti nel pool di proxy, autenticazione con nome utente e password per una maggiore sicurezza e, ultimo ma non meno importante, la possibilità di cambiare il server nazionale. È possibile selezionare il server desiderato aggiungendo il codice del paese all'autenticazione del nome utente. 

L'ultimo è il proxy premium. I proxy premium sono identici ai proxy dedicati ai datacenter. La funzionalità rimane la stessa. La differenza principale è l'accessibilità. Nei proxy premium, l'elenco dei proxy (l'elenco che contiene i proxy) è reso disponibile a tutti gli utenti della rete ProxyScrape. Per questo motivo i proxy premium costano meno dei proxy dedicati ai data center.

Quindi, qual è la migliore soluzione possibile per il miglior proxy HTTP per il web scraping di articoli di notizie utilizzando python? La risposta è "proxy residenziale". Il motivo è semplice. Come detto in precedenza, il proxy residenziale è un proxy rotante, il che significa che il vostro indirizzo IP cambierà dinamicamente nel corso di un periodo di tempo, il che può essere utile per ingannare il server inviando molte richieste in un breve lasso di tempo senza ottenere un blocco dell'IP. 

La cosa migliore è cambiare il server proxy in base al paese. È sufficiente aggiungere il codice ISO_CODE del paese alla fine dell'autenticazione IP o dell'autenticazione con nome utente e password. 

Letture consigliate:

Scraping dei commenti di YouTube - 5 semplici passaggiI migliori 8 strumenti di scraping web in Python nel 2023

Domande frequenti:

1. Qual è il modo migliore per scrappare articoli di notizie usando python?
La libreria python si chiama "BeautifulSoup" ed è in grado di eseguire automaticamente lo scraping di dati da qualsiasi articolo di notizie. L'unico requisito è una conoscenza di base dell'HTML per individuare il tag HTML dal codice sorgente della pagina che contiene i dati da scrapare.
2. È lecito scrapolare articoli di notizie dal sito web?
La risposta è che dipende dai termini e dalle condizioni del sito web. Tuttavia, la maggior parte degli articoli di notizie può essere raschiata, poiché tutte le informazioni sono intenzionalmente rese disponibili al pubblico. Tutti i dati pubblici possono essere scrapati, purché il metodo di scraping non danneggi i dati o il proprietario del sito web.
3. Come si effettua lo scrape di Google News utilizzando Python?
È possibile eseguire lo scraping di Google News o di qualsiasi articolo di notizie utilizzando python con l'aiuto della libreria python chiamata "BeautifulSoup". Installate la libreria e un proxy residenziale affidabile per evitare il blocco dell'IP dal server di destinazione.

Conclusione

In questo articolo abbiamo visto le basi del web scraping, comprendendo i fondamenti del design e della struttura del flusso delle pagine web. Abbiamo anche fatto esperienza pratica estraendo dati da articoli di notizie. Il web scraping può fare miracoli se fatto nel modo giusto. Ad esempio, è possibile creare un modello completamente ottimizzato basato sui dati estratti, in grado di prevedere le categorie e di mostrare i sommari all'utente. La cosa più importante da fare è capire i propri requisiti e comprendere la struttura della pagina. Python dispone di librerie molto potenti e facili da usare per estrarre i dati desiderati. Questo ha reso il web scraping molto facile e divertente.  

È importante notare che questo codice è utile per estrarre i dati da questa particolare pagina web. Se vogliamo farlo da qualsiasi altra pagina, dobbiamo ottimizzare il nostro codice in base alla struttura di quella pagina. Ma una volta che sappiamo come identificarli, il processo è esattamente lo stesso.

Questo articolo si propone di spiegare in modo approfondito l'approccio pratico al web scraping di articoli di notizie utilizzando python. Una cosa da ricordare è che il proxy è una necessità assoluta per il web scraping. Aiuta a prevenire eventuali blocchi IP dal server di destinazione. ProxyScrape fornisce un ottimo e affidabile proxy residenziale per i vostri progetti di web scraping di articoli di notizie con python.