Intraprendere il viaggio avventuroso del web crawling può essere allo stesso tempo emozionante e stimolante, mentre si naviga nei labirintici vicoli di Internet alla ricerca di dati preziosi. Nel vasto universo digitale, l’arte del web crawling è emersa come un’abilità fondamentale, che ci consente di estrarre informazioni in modo efficiente, sviluppare intuizioni e dare un senso al world wide web in continua espansione.
In questo articolo illuminante, attraverseremo l'intricato terreno del web crawling, scoprendo le differenze tra web crawling e web scraping ed esplorando una gamma di strategie e tecnologie che aumenteranno le tue abilità di web crawling.
Dal regno dinamico dei siti Web JavaScript alla potente semplicità di Python, ti guideremo attraverso una moltitudine di suggerimenti e tecniche per garantire che la tua spedizione di scansione del web sia fluida, efficace e senza ostacoli.
Sommario
Quindi, allacciate le cinture e preparatevi a intraprendere un emozionante viaggio nell'affascinante mondo del web crawling!
Scansione Web e Web Scraping
Sebbene il web scraping e il web crawling siano spesso considerati la stessa cosa e siano entrambi utilizzati per il data mining, presentano differenze fondamentali. Esploreremo queste differenze e ti aiuteremo a determinare quale approccio si adatta meglio alle tue esigenze e ai tuoi obiettivi aziendali.
Differenze chiave
In poche parole, il web crawling è ciò che fanno i motori di ricerca: navigano nel web, cercano tutte le informazioni disponibili e seguono ogni collegamento accessibile. Questo processo generale mira a raccogliere quante più informazioni possibili (o anche tutte) da un particolare sito web. In sostanza, questo è ciò che fa Google: visualizza l’intera pagina web e indicizza tutti i dati disponibili.
D'altra parte, il web scraping viene utilizzato quando si desidera scaricare le informazioni raccolte. Il web scraping (noto anche come estrazione dei dati web) è un processo più mirato. Personalizzando i comandi e utilizzando i proxy di scraping, puoi estrarre dati specifici dal tuo sito web di destinazione. Successivamente è possibile scaricare i risultati in un formato adatto, come JSON o Excel.
In alcuni casi, sia il web crawling che il web scraping possono essere utilizzati per raggiungere un unico obiettivo, funzionando essenzialmente come fasi uno e due del processo. Combinando i due, puoi raccogliere grandi quantità di informazioni dai principali siti Web utilizzando un crawler e successivamente estrarre e scaricare i dati specifici di cui hai bisogno con uno scraper.
4 strategie di scansione web
In generale, i web crawler visitano solo una parte delle pagine web in base al loro budget, che può essere determinato da fattori quali il numero massimo di pagine per dominio, la profondità o la durata.
Molti siti Web offrono un file robots.txt che specifica quali parti del sito possono essere sottoposte a scansione e quali sono vietate. Inoltre, c'è sitemap.xml, che è più dettagliato di robots.txt, che guida i bot su quali percorsi eseguire la scansione e fornisce metadati aggiuntivi per ciascun URL.
Gli usi comuni dei web crawler includono:
- I motori di ricerca come Googlebot, Bingbot e Yandex Bot raccolgono HTML da una parte sostanziale del Web, indicizzando i dati per renderli facilmente ricercabili.
- Gli strumenti di analisi SEO raccolgono non solo HTML ma anche metadati, come tempo di risposta e stato della risposta, per identificare pagine interrotte e tenere traccia dei collegamenti tra domini per l'analisi dei backlink.
- Gli strumenti di monitoraggio dei prezzi eseguono la scansione dei siti Web di e-commerce per individuare le pagine dei prodotti ed estrarre metadati, in particolare i prezzi. Queste pagine di prodotto vengono quindi rivisitate periodicamente.
- La scansione comune mantiene a archivio pubblico di dati di scansione web, come il Archivio maggio 2022 contenente 3,45 miliardi di pagine web.
Come eseguire la scansione dei siti Web JavaScript
La scansione di siti Web JavaScript può essere più impegnativa rispetto alla scansione di pagine HTML statiche perché il contenuto viene spesso caricato e manipolato dal codice JavaScript. Per eseguire la scansione di tali siti Web, è necessario utilizzare un browser headless in grado di eseguire JavaScript ed eseguire il rendering del contenuto della pagina. Una scelta popolare per questa attività è la combinazione della libreria Puppeteer e dell'ambiente runtime Node.js.
Ecco una guida passo passo per eseguire la scansione dei siti Web JavaScript utilizzando Puppeteer e Node.js:
1. Installa Node.js
Scarica e installa l'ultima versione di Node.js dal sito Web ufficiale (https://nodejs.org/).
2. Crea una nuova directory di progetto
Crea una nuova directory per il tuo progetto e raggiungila utilizzando la riga di comando.
mkdir js-crawler
cd js-crawler
3. Inizializza un nuovo progetto Node.js
Esegui il comando seguente nella directory del tuo progetto per crearne uno nuovo package.json
file con le impostazioni predefinite.
npm init -y
4. Installa Burattinaio
Installa Puppeteer eseguendo il comando seguente nella directory del progetto
npm install puppeteer
5. Crea un nuovo file JavaScript
Crea un nuovo file denominato
crawler.js
nella directory del tuo progetto, che conterrà il codice per la scansione del sito Web JavaScript.
6. Scrivi il codice del crawler
Aprire
crawler.js
e aggiungi il seguente codice:
const puppeteer = require('puppeteer');
async function crawlJavaScriptWebsite(url) {
Avvia una nuova istanza del browser
const browser = await puppeteer.launch({ headless: true });
Crea una nuova pagina nel browser
const page = await browser.newPage();
Passare all'URL di destinazione
await page.goto(url, { waitUntil: 'networkidle2' })
Estrai i dati dalla pagina utilizzando
evaluate()
const data = await page.evaluate(() => {
Scrivi qui il tuo codice JavaScript personalizzato per estrarre i dati di cui hai bisogno. Ad esempio, estraiamo tutti i titoli (elementi h1) dalla pagina.
const headings = Array.from(document.querySelectorAll('h1')).map(heading => heading.textContent);
return {
headings,
};
});
Chiudi il browser
await browser.close();
Restituisci i dati estratti
return data;
}
Esempio di utilizzo:
crawlJavaScriptWebsite('https://example.com/')
.then(data => console.log(data))
.catch(err => console.error(err));
Sostituisci il
https://example.com/
URL con l'URL del sito Web di destinazione e personalizzare il file
page.evaluate()
funzione per estrarre i dati necessari.
7. Esegui il crawler
Esegui il comando seguente nella directory del tuo progetto per eseguire il crawler:
node crawler.js
Lo script avvierà un browser headless, passerà all'URL di destinazione ed eseguirà il codice JavaScript specificato nel file
page.evaluate()
funzione. I dati estratti verranno registrati sulla console.
Tieni presente che questo è un esempio base di scansione di un sito Web JavaScript. Per casi d'uso più avanzati, potrebbe essere necessario interagire con la pagina, gestire le richieste AJAX, scorrere la pagina o gestire CAPTCHA e cookie.
Come scansionare il Web con Python
La scansione di un sito Web con Python implica il recupero di pagine Web, l'analisi del loro contenuto e il collegamento ad altre pagine. In questa guida utilizzeremo due popolari librerie Python: Requests e Beautiful Soup. Questa guida presuppone che tu abbia installato Python e una conoscenza di base della programmazione Python.
Passaggio 1: installare le librerie richieste
Installa le librerie Requests e Beautiful Soup utilizzando pip:
pip install requests beautifulsoup4
Passaggio 2: importa le librerie
Importa le librerie richieste nel tuo script Python:
import requests
from bs4 import BeautifulSoup
Passaggio 3: crea una funzione per recuperare il contenuto della pagina web
Crea una funzione per recuperare il contenuto della pagina web utilizzando la libreria Richieste:
def fetch_page(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
print(f"Failed to fetch {url} (status code {response.status_code})")
return None
Passaggio 4: crea una funzione per analizzare il contenuto della pagina web
Crea una funzione per analizzare il contenuto della pagina web utilizzando la libreria Beautiful Soup:
def parse_page(html):
soup = BeautifulSoup(html, "html.parser")
return soup
Passaggio 5: crea una funzione per estrarre i collegamenti dal contenuto analizzato
Crea una funzione per estrarre tutti i collegamenti dal contenuto della pagina Web analizzata:
def extract_links(soup, base_url):
links = []
for a_tag in soup.find_all("a"):
href = a_tag.get("href")
if href and not href.startswith("#"):
if not href.startswith("http"):
href = base_url + href
links.append(href)
return links
Passaggio 6: crea una funzione per eseguire la scansione del sito Web
Crea una funzione per eseguire la scansione ricorsiva del sito Web:
def crawl_website(url, max_depth=2, depth=0):
if depth > max_depth:
return
html = fetch_page(url)
if not html:
return
soup = parse_page(html)
links = extract_links(soup, url)
print(f"{' ' * depth}[{depth}] {url}")
for link in links:
crawl_website(link, max_depth, depth + 1)
Passaggio 7: esegui il crawler
Esegui il crawler chiamando il file
crawl_website
funzione con l'URL desiderato e la profondità massima:
if __name__ == "__main__":
start_url = "https://example.com/"
max_depth = 2
crawl_website(start_url, max_depth)
Questa guida passo passo mostra come eseguire la scansione di un sito Web utilizzando Python. Puoi personalizzare il
crawl_website
funzione per gestire strutture di siti Web specifiche, aggiungere logica per l'archiviazione delle informazioni estratte o implementare funzionalità di scansione più avanzate come la gestione di robots.txt, limitazione della velocità o richieste di parallelizzazione.
12 suggerimenti su come eseguire la scansione di un sito Web senza essere bloccato
Queste sono le strategie principali per eseguire la scansione del web senza incontrare blocchi:
#1: verificare il protocollo di esclusione dei robot
Prima di eseguire la scansione o lo scraping di un sito Web, assicurati che il tuo target consenta la raccolta di dati dalla sua pagina. Ispezionare il file del protocollo di esclusione dei robot del sito Web (robots.txt) e rispettare le normative del sito Web.
Anche se il sito web consente la scansione, sii rispettoso e non danneggiare il sito. Rispettare le normative specificate nel protocollo di esclusione dei robot, eseguire la scansione durante le ore non di punta, limitare le richieste provenienti da un singolo indirizzo IP e stabilire un ritardo tra le richieste.
Tuttavia, anche se il sito Web consente il web scraping, potresti comunque riscontrare blocchi, quindi è essenziale seguire anche passaggi aggiuntivi. Per una guida più completa, consulta il nostro tutorial Python sul web scraping.
#2: utilizza un server proxy
La scansione del Web sarebbe quasi impossibile senza proxy. Scegli un fornitore di servizi proxy affidabile e seleziona tra data center e proxy IP residenziali in base alla tua attività.
L'utilizzo di un intermediario tra il tuo dispositivo e il sito Web di destinazione riduce i blocchi di indirizzi IP, garantisce l'anonimato e ti consente di accedere a siti Web che potrebbero non essere disponibili nella tua regione. Ad esempio, se ti trovi in Germania, potresti dover utilizzare un proxy statunitense per accedere ai contenuti web negli Stati Uniti.
Per risultati ottimali, scegli un provider proxy con un ampio pool IP e un'ampia gamma di posizioni.
#3: Ruota indirizzi IP
Quando si utilizza un pool di proxy, è fondamentale ruotare gli indirizzi IP.
Se invii troppe richieste dallo stesso indirizzo IP, il sito web di destinazione ti riconoscerà presto come una minaccia e bloccherà il tuo indirizzo IP. La rotazione proxy ti consente di apparire come se fossi più utenti Internet diversi e riduce la probabilità di essere bloccato.
Tutti i proxy residenziali Oxylabs ruotano gli IP, ma se utilizzi i proxy Datacenter, dovresti utilizzare un servizio di rotazione proxy. Ruotiamo anche i proxy IPv6 e IPv4. Se sei interessato alle differenze tra IPv4 e IPv6, leggi l'articolo scritto dalla mia collega Iveta.
#4: utilizza agenti utente reali
La maggior parte dei server che ospitano siti Web possono esaminare le intestazioni della richiesta HTTP generate dai bot di scansione. Questa intestazione della richiesta HTTP, chiamata user agent, contiene varie informazioni che vanno dal sistema operativo e dal software al tipo di applicazione e alla sua versione.
I server possono facilmente rilevare agenti utente sospetti. Gli agenti utente reali contengono configurazioni di richieste HTTP popolari inviate dai visitatori organici. Per evitare di essere bloccato, assicurati di personalizzare il tuo user agent in modo che assomigli a uno organico.
Poiché ogni richiesta effettuata da un browser web contiene un agente utente, dovresti cambiare frequentemente agente utente.
È anche fondamentale utilizzare gli user agent aggiornati e più popolari. Se stai effettuando richieste con un user agent vecchio di cinque anni da una versione di Firefox non supportata, solleva molti segnali d'allarme. Puoi trovare database pubblici su Internet che mostrano quali user agent sono attualmente i più popolari. Disponiamo anche di un nostro database regolarmente aggiornato, quindi contattaci se desideri accedervi.
#5: imposta correttamente l'impronta digitale
I meccanismi anti-scraping stanno diventando più sofisticati e alcuni siti Web utilizzano il protocollo TCP (Transmission Control Protocol) o l'impronta digitale IP per rilevare i bot.
Durante lo scraping del web, TCP lascia vari parametri. Questi parametri sono stabiliti dal sistema operativo o dal dispositivo dell'utente finale. Se ti stai chiedendo come evitare di essere inserito nella lista nera durante lo scraping, assicurati che i tuoi parametri siano coerenti. In alternativa, puoi utilizzare Web Unblocker, una soluzione proxy basata sull'intelligenza artificiale con funzionalità di impronta digitale dinamica. Web Unblocker combina molte variabili di rilevamento delle impronte digitali in modo tale che, anche quando identifica una singola impronta digitale che funziona meglio, le impronte digitali sono ancora apparentemente casuali e possono superare i controlli anti-bot.
#6: Attenzione contro le trappole Honeypot
Fai attenzione alle trappole honeypot che sono collegamenti nel codice HTML che possono essere rilevati dai web scraper ma sono invisibili agli utenti organici. Queste trappole vengono utilizzate per identificare e bloccare i web crawler poiché solo i robot seguirebbero questi collegamenti. Sebbene l'impostazione degli honeypot richieda molto lavoro, alcuni target potrebbero utilizzarli per rilevare i web crawler, quindi fai attenzione se la tua richiesta viene bloccata e viene rilevato un crawler.
#7: utilizza i servizi di risoluzione CAPTCHA
I CAPTCHA rappresentano una grande sfida per la scansione del web poiché richiedono ai visitatori di risolvere enigmi per confermare che sono umani. Questi enigmi spesso includono immagini difficili da decifrare per i computer. Per aggirare i CAPTCHA, utilizza servizi di risoluzione CAPTCHA dedicati o strumenti di scansione pronti all'uso, come lo strumento di scansione dei dati di Oxylabs, che risolve i CAPTCHA e fornisce risultati pronti all'uso. Un comportamento sospetto può indurre la vittima a richiedere la risoluzione del CAPTCHA.
#8: modifica il modello di scansione
Per evitare di essere bloccato, modifica il modello di navigazione del tuo crawler per renderlo meno prevedibile. Puoi aggiungere clic, scorrimenti e movimenti del mouse casuali per imitare il comportamento di navigazione di un utente normale. Per quanto riguarda le migliori pratiche, pensa a come un utente tipico navigherebbe nel sito Web e applicherà tali principi allo strumento. Ad esempio, visitare la home page prima di richiedere le pagine interne è uno schema logico.
#9: ridurre la velocità del raschiatore
Per ridurre il rischio di essere bloccati, rallenta la velocità dello scraper aggiungendo interruzioni casuali tra le richieste o avviando comandi di attesa prima di eseguire un'azione. Se l'URL ha una velocità limitata, rispetta le limitazioni del sito web e riduci la velocità di scraping per evitare di limitare le richieste.
#10: scansione durante le ore non di punta
I crawler si muovono più velocemente degli utenti normali e possono avere un impatto significativo sul carico del server. La scansione durante i periodi di carico elevato può influire negativamente sull'esperienza dell'utente a causa di rallentamenti del servizio. Per evitare ciò, eseguire la scansione durante le ore non di punta, ad esempio subito dopo la mezzanotte (localizzata nel servizio), per ridurre il carico sul server.
#11: evitare lo scraping delle immagini
Lo scraping delle immagini può essere rischioso, poiché spesso si tratta di oggetti ricchi di dati che potrebbero essere protetti da copyright. Inoltre, le immagini sono spesso nascoste negli elementi JavaScript, il che può aumentare la complessità del processo di scraping e rallentare il web scraper. Per estrarre immagini dagli elementi JS, sarebbe necessario utilizzare una procedura di scraping più complicata.
#12: utilizza un browser headless
Un browser headless è uno strumento che funziona come un normale browser ma senza un'interfaccia utente grafica. Consente lo scraping del contenuto caricato eseguendo il rendering di elementi JavaScript. I browser più utilizzati, Chrome e Firefox, dispongono di modalità headless che possono essere utilizzate per il web scraping senza attivare blocchi.
Tutorial video su come eseguire la scansione di un sito Web
In questo tutorial di Oxylabs troverai le basi del web crawling e la sua importanza per la raccolta dei dati, discutendo al tempo stesso gli aspetti etici e legali. Mostra strumenti popolari come Scrapy, Beautiful Soup e Selenium e ti aiuta a scegliere quello migliore per le tue esigenze.
Il tutorial ti aiuta a comprendere la struttura di un sito Web, a creare un semplice web crawler ed estrarre le informazioni di cui hai bisogno. Ti ricorda inoltre di seguire le buone maniere di web scraping, come rispettare le regole del file robots.txt e non sovraccaricare i server.
Il video ti aiuta anche a gestire sfide come ottenere dati da pagine dinamiche, gestire più pagine ed evitare blocchi. Mostra come salvare e organizzare i tuoi dati e fornisce suggerimenti su come rendere il tuo progetto di scansione web più grande ed efficiente. Infine, ti ricorda di seguire sempre le linee guida etiche e legali.
Quando raggiungiamo la fine della nostra esilarante esplorazione nel mondo del web crawling, diventa chiaro che padroneggiare quest'arte è come possedere una mappa del tesoro nel vasto e in continua evoluzione panorama di Internet. Abbiamo approfondito le complessità che distinguono il web crawling dal web scraping, scoperto diverse strategie e ci siamo avventurati nei regni dinamici dei siti Web JavaScript e del web crawling basato su Python.
Il nostro tesoro di suggerimenti e consigli garantisce che i tuoi sforzi di scansione del web rimangano responsabili ed etici, evitando le insidie e gli ostacoli che potrebbero sorgere lungo il percorso. Quindi, mentre salpi nello sconfinato oceano digitale, armato della conoscenza e della saggezza raccolte da questo articolo completo, ricorda che la capacità di sfruttare la potenza del web crawling ti eleverà al di sopra della concorrenza e sbloccherà le gemme nascoste nelle profondità di il mondo digitale.