Python per Web Scraping avanzato: bypassare i meccanismi anti-scraping con Scrapy e Selenium

Pubblicato: 2025-01-09

Sommario

Attiva/disattiva

Python per Web Scraping avanzato: bypassare i meccanismi anti-scraping con Scrapy e Selenium

INTRODUZIONE

Il web scraping è quindi diventato un metodo essenziale di data mining. Tuttavia, è importante notare che i siti Web di oggi sono protetti da avanzati sistemi di conformità anti-scraping che impediscono tali processi. Questo post del blog approfondirà il modo in cui Python con Scrapy e Selenium aiuta gli sviluppatori a raccogliere dati, in particolare da siti Web altamente protetti. Esploriamo i metodi innovativi dei servizi di sviluppo web Pythonper superare i CAPTCHA, eludere il rilevamento e preservare un comportamento etico.

Scrapy vs. Selenio: un confronto dettagliato

  • Raschiante

Scrapy è un semplice framework di spidering su scala web Python. La sua forza è rappresentata al meglio nella sua capacità di gestire siti Web statici e di eseguire la scansione di una grande quantità di dati.

Punti di forza:

Velocità: a differenza di altri strumenti di scraping, Scrapy si basa su richieste asincrone, che aumentano la velocità di scraping.

Personalizzazione:dispone di pipeline per l'acquisizione e la pulizia dei dati.

Scalabilità: essenzialmente utile durante lo scraping, che coinvolge diversi siti Web che forniscono un grande volume di dati.

Funzionalità integrate: contiene metodi per gestire robots.txt, cookie e intestazioni.

  • Selenio

Selenium è uno strumento creato per l'automazione del browser appositamente per siti Web dinamici e interattivi.

Punti di forza:

Gestione dinamica dei contenuti:quando si tratta di pagine ricche di JavaScript, Selenium offre le migliori prestazioni.

Interattività: consente agli utenti di utilizzare il mouse per fare clic, digitare sulla tastiera e scorrere sulla rotellina o sulla barra.

Risoluzione CAPTCHA: particolarmente adatto laddove vi sia la necessità di testare l'utilizzo del sistema da parte di un utente.

Debug visivo: durante il debug è possibile visualizzare la pagina renderizzata dal punto di vista degli sviluppatori.

Quando decidiamo tra l'utilizzo di Scrapy e Selenium, ci sono diversi fattori indicati di seguito che consideriamo nel prendere la decisione.

Siti Web statici: utilizza Scrapy per efficienza.

Siti Web dinamici: lo scraping di contenuti sviluppati da JavaScript viene eseguito meglio da Selenium.

Approccio ibrido:utilizza Scrapy per attività generali di web scraping e quindi utilizza Selenium per pagine Web specifiche che richiedono l'elaborazione di Javascript.

Tecniche avanzate per evitare il rilevamento

Qualcuno ha provato a utilizzare meccanismi anti-raschiamento per contrastare comportamenti insoliti? Di seguito sono riportate le tecniche avanzate per non essere rilevati:

  1. Agenti utente a rotazione

I siti tengono traccia di tali agenti per rilevare bot e scraper. Gli user agent a rotazione imitano diversi dispositivi e browser.

Esempio di implementazione:

da fake_useragent importa UserAgent

intestazioni = {

'Agente utente': UserAgent().random

}

  1. Gestione delle deleghe

Le porte mascherano il tuo indirizzo IP e ti assicurano di non incontrare divieti IP. La rotazione periodica dei proxy aiuta ad avere l'anonimato.

Provider proxy popolari:

Dati luminosi

ProxyMesh

Proxy intelligente

Utilizzo dei proxy in Scrapy:

DOWNLOADER_MIDDLEWARES = {

'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,

'mioprogetto.middlewares.ProxyMiddleware': 100,

}

  1. Richiedi limitazione

Raschiare ad una velocità elevata è sospetto ed è molto probabile che venga rilevato. Utilizza Scrapy AutoThrottle per creare ritardi tra le richieste.

Configurazione:

AUTOTHROTTLE_ENABLED = Vero

AUTOTHROTTLE_START_DELAY = 5

AUTOTHROTTLE_MAX_DELAY = 60

  1. Randomizzazione delle intestazioni delle richieste

Molti campi come Referer, Accept-Language e Cookie possono nascondere le richieste tanto quanto un essere umano.

  1. Esecuzione JavaScript

Utilizza i browser headless in Selenium per eseguire script Java e anche per catturare pagine non semplici/dinamiche.

Risoluzione CAPTCHA e navigazione senza testa con selenio

Uno dei maggiori problemi del web scraping viene catturato sotto il nome di CAPTCHA. Le funzionalità di automazione di Selenium consentono di risolvere CAPTCHA e di navigare senza testa.

  1. Risoluzione dei CAPTCHA

Utilizzo di API di terze parti

Servizi come 2Captcha e Anti-Captcha possono automatizzare la risoluzione dei CAPTCHA.

Esempio di implementazione:

richieste di importazione

risposta = richieste.post('https://2captcha.com/in.php', dati={

'chiave': API_KEY,

'metodo': 'userrecaptcha',

'chiavegoogle': CAPTCHA_KEY,

'URL pagina': PAGE_URL

})

Approcci di apprendimento automatico

Nei CAPTCHA difficili è possibile identificare testo o modelli utilizzando modelli di apprendimento dell'intelligenza artificiale. A questo scopo possono essere utilizzati programmi come TensorFlow e OpenCV.

  1. Navigazione senza testa

I browser headless funzionano senza interfaccia grafica, il che significa che lo scraping è più veloce e non è facilmente riconoscibile.

Esempio con selenio:

dal webdriver di importazione del selenio

opzioni = webdriver.ChromeOptions()

opzioni.add_argument('–headless')

driver = webdriver.Chrome(opzioni=opzioni)

driver.get('https://esempio.com')

Scraping di contenuti dinamici: casi d'uso ed esempi

  1. Siti di commercio elettronico

La sfida:categorie di prodotti dinamiche e blocchi più piccoli di prodotti divisi in pagine.

Soluzione:mentre Scrapy per la scansione e il recupero di più pagine Web per gli stessi prodotti, Selenium per il rendering dei dettagli del prodotto.

  1. Siti web di notizie

Sfida: articoli che vengono caricati con l'aiuto di AJAX sulla pagina dopo il caricamento iniziale.

Soluzione: in Selenium esiste un modo per caricare altri articoli che vengono visualizzati mentre l'utente scorre la pagina.

  1. Dati sui social media

Sfidae: Scorrimento infinito e utilizzo di elementi interattivi sul sito web.

Soluzione: per scansionare la pagina e ottenere dati, l'execute_script di selenium è utile.

Esempio:

SCROLL_PAUSE_TIME = 2

mentre Vero:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

tempo.sonno(SCROLL_PAUSE_TIME)

Considerazioni etiche e linee guida legali

  1. Rispetta Robots.txt

Per prima cosa, vai al sito web che intendi eseguire lo scraping e conduci una ricerca preventiva per determinare le politiche di scraping indicate online nel file robots.txt.

  1. Evitare carichi eccessivi

Lo scraping può essere eseguito molto frequentemente o con intensità molto elevata e questo non va bene per il server della pagina web. Per evitare un impatto significativo, limitare o inserire ritardi nel processo di gestione del rischio.

  1. Politiche di utilizzo dei dati

I dati di web scraping dovrebbero essere allineati al GDPR, al CCPA e ad altre leggi e atti sulla protezione dei dati.

  1. Attribuzione

In caso di utilizzo dei dati raschiati per la pubblicazione è necessario annotare la fonte per evitare violazioni delle leggi sul copyright.

  1. Richiedi il permesso

Quando possibile, richiedere il permesso scritto per scaricare informazioni dal sito web.

Domande frequenti

  • È possibile usare Scrapy e Selenium insieme?

Sì, sarà efficiente utilizzare Scrapy per la scansione e poi Selenium per la gestione dei contenuti dinamici.

  1. In che modo i proxy aiutano nel web scraping?

Nascondono il tuo indirizzo IP per evitare di essere bannato e anche per aprirsi a siti con restrizioni.

  • Cos'è la navigazione headless?

La navigazione senza testa consente inoltre di raschiare un sito Web senza richiedere un'interfaccia utente grafica, quindi impiegando meno tempo e non si nota.

  • Esiste qualche rischio dal punto di vista legale per il web scraping?

Ebbene sì, lo scraping dei dati può anche violare le leggi sulla privacy dei dati o i termini di servizio del sito.

  • Cos'è meglio per la raschiatura su larga scala: Scrapy o Selenium?

Lo scraping tramite Scrapy è più veloce e può essere espanso rapidamente, il che lo rende adatto allo scraping su larga scala rispetto a Selenium, che è adatto per le pagine dinamiche.

Conclusione

In realtà, il web scraping dei siti Web moderni richiede strumenti e tecniche Pythonefficaci . Scrapy e Selenium sono due potenti strumenti di scraping che coprono sia lo scraping web HTML statico che quello dinamico. Lo sviluppo di nuovi user agent, server proxy e risoluzione di captcha rientrano tra le pratiche efficaci per evitare tali meccanismi. Tuttavia, i fattori etici devono essere sempre presi in considerazione quando si utilizza l'approccio del web scraping con usi vietati e illegali.