Scraping del web con MechanicalSoup

Pitone, Come fare, Scraping, 12 settembre - 20245 minuti di lettura

Il web scraping è diventato uno strumento essenziale nell'era digitale, soprattutto per gli sviluppatori web, gli analisti di dati e i digital marketer. Immaginate di poter estrarre informazioni preziose dai siti web in modo rapido ed efficiente. È qui che entra in gioco MechanicalSoup. Questa guida esplorerà le complessità dell'utilizzo di MechanicalSoup per lo scraping del web, offrendo spunti e suggerimenti pratici per iniziare.

Il ruolo di MechanicalSoup nello scraping del web

MechanicalSoup è una libreria Python progettata per semplificare il web scraping, fornendo un'interfaccia semplice per automatizzare le interazioni con le pagine web. Gestisce in modo efficiente moduli, link e può navigare in siti che richiedono azioni di base da parte dell'utente, come l'invio di moduli e la navigazione di link. Questo lo rende ideale per automatizzare attività su siti web con contenuti statici, dove non sono richiesti comportamenti complessi da parte dell'utente.

Guida introduttiva Impostazione di MechanicalSoup per lo scraping del web

Prima di addentrarci nelle caratteristiche specifiche dello scraping del web, vediamo di configurare MechanicalSoup. Il processo di installazione è semplice e può essere completato in pochi passaggi.

Installazione di MechanicalSoup

Per installare MechanicalSoup, è necessario che Python sia installato sul computer. È quindi possibile utilizzare pip, il programma di installazione dei pacchetti di Python, per installare MechanicalSoup. Aprite il vostro terminale e digitate il seguente comando:

pip installare mechanicalsoup

Impostazione dell'ambiente

Una volta installato MechanicalSoup, la configurazione dell'ambiente di sviluppo è fondamentale. Avrete bisogno di un editor di codice, come Visual Studio Code o PyCharm, per scrivere ed eseguire gli script Python. Assicuratevi di avere installato anche le librerie "BeautifulSoup" e "requests".

Primi passi con MechanicalSoup

La creazione del primo script di web scraping con MechanicalSoup richiede alcuni passaggi fondamentali. Si inizia importando le librerie necessarie e inizializzando un oggetto browser. Ecco un semplice esempio per iniziare:

importare mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/")

Capire le basi del Web Scraping con MechanicalSoup

Ora che abbiamo configurato MechanicalSoup, esploriamo le basi del web scraping. La comprensione di questi fondamenti vi permetterà di costruire script di scraping più complessi.

Gestione dei moduli

In MechanicalSoup il metodo "select_form()" è utilizzato per individuare e gestire i moduli.
L'argomentazione per select_form() è un selettore CSS. Nell'esempio di codice qui sotto, utilizziamo questo sito per compilare un semplice modulo di ricerca a un campo. Poiché nel nostro caso c'è un solo modulo nella pagina, browser.select_form() è sufficiente. In caso contrario, si dovrà inserire l'opzione selettore css al select_form() metodo
Inoltre, per visualizzare i campi del modulo, è possibile utilizzare la funzione print_summary() metodo. In questo modo si otterranno informazioni dettagliate su ciascun campo. Dato che il modulo contiene due tipi di elementi - campi di testo e pulsanti - dovremo compilare solo il campo di testo e poi inviare il modulo:

importare mechanicalsoup


browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")

# Selezionare il modulo
search_form = browser.select_form()

print(search_form.print_summary())
search_form.set("q",'test')

browser.submit_selected()

Ecco il risultato del codice sopra riportato.

<input class="form-control" id="q" name="q" placeholder="Search for Teams" type="text"/>
<input class="btn btn-primary" type="submit" value="Search"/>

Gestione della paginazione

Lo scraping del web comporta spesso la gestione di più pagine di dati. MechanicalSoup non offre direttamente una funzione di paginazione delle pagine tramite link di paginazione.
Nel sito web di esempio che stiamo utilizzando la paginazione si presenta come segue:

Ecco come appare la struttura HTML:

 
So what we will do is first select the list that holds the pagination links with "browser.page.select_one('ul.pagination')".
Then with ".select('li')[1::]" we select all "<li>" elements inside 'pagination' list starting from the second element. This will return a list of "<li>" elements and then we paginate each one of them in a "for loop" starting from the second element and for each "<li>" element we extract the "<a>" tag and then use it in "follow_link()" method to navigate to that page.
Here is the full example:  

importare mechanicalsoup


browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")

per link in browser.page.select_one('ul.pagination').select('li')[1::]:
    next_page_link = link.select_one('a')
    browser.follow_link(next_page_link)
   print(browser.url)

Impostazione dei proxy

Quando si effettua lo scraping di siti web o si automatizzano le interazioni sul web, l'uso dei proxy può essere fondamentale per aggirare le geo-restrizioni, gestire i limiti di velocità o prevenire i divieti IP. Utilizzando MechanicalSoup in combinazione con la libreria "requests" possiamo integrare perfettamente le configurazioni dei proxy, consentendovi di sfruttare questi vantaggi in modo efficace. Ecco come impostare i proxy in MechanicalSoup per le vostre attività di web scraping:

import mechanicalsoup
import requests

def create_proxy_browser():
    # Define your proxy configuration (example values)
    proxies = {
        "http": "rp.proxyscrape.com:6060:username:password",
        "https": "rp.proxyscrape.com:6060:username:password",
    }

    # Create a session object with proxy settings
    session = requests.Session()
    session.proxies.update(proxies)

    # Optionally, you can add headers or other session settings here
    session.headers.update({
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    })

    # Create a MechanicalSoup StatefulBrowser using the configured session
    browser = mechanicalsoup.StatefulBrowser(session=session)
    return browser

# Usage
browser = create_proxy_browser()
response = browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")
print(response.text)  # Outputs the content of the page

Considerazioni etiche e legali sullo scraping del web

Il web scraping può sollevare problemi etici e legali. È essenziale comprendere queste considerazioni per evitare potenziali problemi.

Rispetto delle politiche del sito web

Prima di effettuare lo scraping, controllate sempre i termini di servizio di un sito web. Alcuni siti vietano esplicitamente lo scraping, mentre altri possono avere linee guida specifiche. Ignorare queste politiche può portare a conseguenze legali.

Evitare il sovraccarico dei server

Richieste frequenti a un sito web possono sovraccaricare i suoi server, causando interruzioni. Per evitare che ciò accada, è opportuno ritardare le richieste e rispettare il file `robots.txt` del sito web. Ecco come aggiungere un ritardo:

importare time
time.sleep(2) # Ritardo di 2 secondi

Privacy dei dati

Assicurarsi che i dati raccolti non violino le norme sulla privacy, come il GDPR. Le informazioni personali devono essere gestite con cura e raccolte solo quando necessario.

Conclusione

Lo scraping del web con MechanicalSoup offre una soluzione potente e flessibile per sviluppatori web, analisti di dati e marketer digitali. Seguendo i passaggi descritti in questa guida, potrete estrarre in modo efficiente dati preziosi dai siti web, automatizzare le attività ripetitive e ottenere un vantaggio competitivo nel vostro settore.

Che siate professionisti esperti o alle prime armi, MechanicalSoup vi fornisce gli strumenti necessari per avere successo. Ricordate di considerare sempre gli aspetti etici e legali, di seguire le migliori pratiche e di migliorare continuamente le vostre competenze.

Siete pronti a portare le vostre abilità di web scraping al livello successivo? Iniziate a sperimentare con MechanicalSoup oggi stesso e sbloccate tutto il potenziale dell'estrazione dei dati dal web. Buon scraping!