Come impostare i proxy in Selenium per lo scraping del web

Come fare, Pitone, Proxy, 27-nov-20245 minuti di lettura

Quando si lavora con Selenium per lo scraping o l'automazione del web, l'integrazione dei proxy è un must. I proxy consentono di aggirare divieti, limiti di velocità e limitazioni geografiche, rendendo le attività più semplici ed efficienti. Ma configurare i proxy in Selenium può essere una sfida, soprattutto se si ha a che fare con l'autenticazione o si devono monitorare le richieste HTTP. È qui che entra in gioco Selenium Wire.

Selenio-Filo

Selenium Wire è una versione estesa di Selenium che aggiunge ulteriori funzionalità avanzate, consentendo di autenticare facilmente i proxy, intercettare le richieste e le risposte HTTP ed eseguire il debug del traffico di rete.

In questa guida mostreremo come impostare i proxy in Selenium usando selenio-filo e il webdriver-manager. In genere, è necessario scaricare i file binari per i webdriver dai browser e mantenere aggiornamenti regolari. Il webdriver-manager semplifica questo processo gestendo queste attività per voi.

Alla fine di questo blog, avrete un'impostazione di Selenium completamente configurata su misura per i proxy di ProxyScrape , pronta ad affrontare qualsiasi sfida vi si presenti. Tuffiamoci!

TL;DR

Per accedere allo script completo senza seguire l'intero tutorial, fate clic su questo link per copiare il codice completo.

Prerequisiti 

Prima di immergerci nell'impostazione dei proxy in Selenium, assicuriamoci di avere installato e pronto i seguenti strumenti e librerie:

  • Python installato
    • Assicuratevi di avere installato Python 3.7 o superiore sul vostro sistema.
    • È possibile scaricare l'ultima versione dal sito ufficiale di Python.
  • Pacchetti Python necessari (installazione Pip)
    • selenio-filo
    • webdriver-manager

Eseguire il seguente comando per installare tutte le dipendenze:

pip installare selenium-wire webdriver-manager

Nota: è possibile che si verifichi l'errore "ModuleNotFoundError: Nessun modulo chiamato blinker._saferef". Questo problema può essere risolto aggiornando la libreria blinker alla versione 1.7.0.

  • Iniziare con Disinstallazione la versione attuale di lampeggiatore
pip disinstallare blinker
  • Quindi installare la versione specifica sopra menzionata:
pip installa blinker==1.7.0

Una volta soddisfatti i prerequisiti, vediamo di suddividere la configurazione dello script in tre semplici passaggi:

Impostazione dei proxy in Selenium: Lo script

Dopo aver trattato i prerequisiti, passiamo allo script vero e proprio. Questa guida passo passo vi aiuterà a integrare ProxyScrape deleghe residenziali con Selenium utilizzando selenio-filo e webdriver-manager.

1. Importazione delle librerie necessarie

Si inizia importando le librerie necessarie:

importare re
da seleniumwire import webdriver
da selenium.webdriver.chrome.service import Service
da selenium.webdriver.chrome.options importare Options
da webdriver_manager.chrome import ChromeDriverManager

2. Configurazione del proxy

Definire i dettagli del proxy ProxyScrape :

indirizzo_proxy = "rp.proxyscrape.com:6060"
proxy_username = "il tuo_proxy_username"
proxy_password = "la tua_proxy_password".
  • Sostituire i segnaposto (nome_utente_proxy, password_proxy) con le credenziali reali di ProxyScrape .
  • rp.proxyscrape.com:6060 è l'endpoint del proxy residenziale ProxyScrape .

3. Opzioni del filo di selenio

Impostare il proxy in Selenium Wire:

sw_options = {
   'proxy': {
       'http': f'http://{proxy_username}:{proxy_password}@{proxy_address}',
       'https': f'https://{proxy_username}:{proxy_password}@{proxy_address}',
   }
}

4. Configurazione delle opzioni di Chrome

Ottimizzare le impostazioni di Chrome per migliorare le prestazioni:

chrome_options = Opzioni()
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

5. Inizializzare WebDriver

Impostazione selenio-filo con webdriver-manager:

servizio = servizio(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, seleniumwire_options=sw_options, options=chrome_options)
  • ChromeDriverManager: Scarica e imposta automaticamente il binario di ChromeDriver corretto per la versione del browser in uso.
  • seleniumwire_options: Configura il proxy per Selenium Wire.
  • opzioni: Applica le impostazioni specifiche di Chrome.

6. Accedere al sito web di destinazione

Accedere all'endpoint ProxyScrape Judge per testare il proxy:

driver.get('https://ssl-judge2.api.proxyscrape.com/')
  • ProxyScrape Giudice: Questo endpoint restituisce informazioni sul proxy utilizzato, come l'indirizzo IP e le intestazioni.

7. Analizzare la risposta

Estrarre e visualizzare l'indirizzo IP proxy utilizzando una regex:

# Esempio: Estrarre l'IP dalla risposta
response = driver.page_source

# usando una semplice regex per analizzare l'ip di origine
print("Risposta:", risposta)
print("Il vostro IP è:", re.search("HTTP_X_FORWARDED_FOR = (\d+\.)+\d+", response).group().split("=")[-1])
# chiudere l'istanza del browser
driver.quit()
  • Spiegazione di Regex:
    • Corrisponde all'intestazione HTTP_X_FORWARDED_FOR ed estrae l'IP proxy
    • Divide il risultato per isolare l'indirizzo IP

Conclusione

In conclusione, l'uso dei proxy residenziali diProxyScrape con Selenium Wire è una soluzione solida per tutti coloro che necessitano di funzionalità avanzate di scraping e automazione del web con una maggiore privacy e sicurezza.

Seguendo questa guida, è possibile configurare un ambiente continuo che non solo aggira le restrizioni, ma richiede anche un minimo sforzo di configurazione. Questo metodo sfrutta strumenti potenti come Selenium Wire e WebDriver Managerper gestire e instradare in modo efficiente il traffico attraverso i proxy, assicurando che le attività di scraping rimangano efficienti e affidabili.

Se avete bisogno di assistenza con il web scraping o avete domande sul nostro prodotto, non esitate a contattarci tramite live chat. Potete anche unirvi alla nostra comunità Discord per ricevere supporto e aggiornamenti.