Navigando nel labirinto: flussi di lavoro proxy gratuiti per lo scraping di contenuti dinamici
Comprensione dello scraping dinamico dei contenuti
I contenuti dinamici, quella forza mutevole che anima le pagine web moderne, sfuggono alla comprensione delle ingenue richieste HTTP. Resi tramite JavaScript, richiedono più di semplici GET; richiedono orchestrazione: richieste mascherate da browser legittimi, proxy che aggirano i divieti IP e codice che legge tra le righe.
Il ruolo dei proxy nello scraping dinamico
I proxy sono le maschere della nostra mascherata digitale, essenziali per:
- Elusione dei limiti di velocità basati su IP
- Aggirare le restrizioni geografiche
- Distribuzione del traffico per evitare il rilevamento
Ma come si può ottenere questo anonimato senza attingere alle casse? Proxy gratuiti: effimeri, indisciplinati e tuttavia indispensabili. Analizziamone l'uso con precisione chirurgica.
Flusso di lavoro 1: rotazione di proxy pubblici gratuiti con richieste e BeautifulSoup
Ingredienti
- Elenchi proxy gratuiti
richieste
,Zuppa bella
in Python
Passi
- Proxy di raccolta
Raccogli un elenco di proxy gratuiti, ad esempio da lista-proxy-gratuita.net.
"pitone
richieste di importazione
da bs4 importa BeautifulSoup
def get_proxies():
url = 'https://free-proxy-list.net/'
zuppa = BeautifulSoup(requests.get(url).content, 'html.parser')
proxy = set()
per riga in soup.find('tabella', id='proxylisttable').tbody.find_all('tr'):
se row.find_all('td')[6].text == 'yes': solo proxy HTTPS #
ip = row.find_all('td')[0].text
porta = riga.find_all('td')[1].testo
proxy.add(f'{ip}:{porta}')
elenco di ritorno (proxy)
“`
- Ruota i proxy per le richieste
"pitone
importa casuale
proxy = get_proxies()
def fetch_with_proxy(url):
proxy = random.choice(proxy)
Tentativo:
resp = requests.get(url, proxies={“http”: f”http://{proxy}”, “https”: f”http://{proxy}”}, timeout=5)
se resp.status_code == 200:
restituisci il testo corrispondente
eccetto Eccezione:
passaggio
restituisci Nessuno
“`
- Gestire i contenuti dinamici
Per le pagine con JS minimo, ispezionare il traffico di rete per trovare gli endpoint XHR e recuperare i dati direttamente.
Vantaggi e svantaggi
Caratteristica | Professionisti | Contro |
---|---|---|
Impostare | Veloce, facile | I proxy spesso non sono affidabili |
Anonimato | La rotazione degli IP riduce i divieti | Proxy frequenti morti/lenti |
Contenuto dinamico | Funziona solo per siti semplici renderizzati in JS | I siti JS completi necessitano di browser emu |
Flusso di lavoro 2: Scraping con Selenium e rotazione proxy gratuita
Ingredienti
Passi
- Recupera un elenco proxy
Logica simile a quella sopra, ma mirata sslproxies.org.
- Configurare Selenium per utilizzare un proxy
"pitone
da selenio importa webdriver
da selenium.webdriver.chrome.options importa Opzioni
def get_chrome_driver(proxy):
opzioni = Opzioni()
opzioni.aggiungi_argomento(f'–proxy-server=http://{proxy}')
opzioni.aggiungi_argomento('–senza testa')
restituisci webdriver.Chrome(opzioni=opzioni)
“`
- Raccogli contenuto dinamico
pitone
proxy = get_proxies()
driver = get_chrome_driver(random.choice(proxy))
driver.get('https://quotes.toscrape.com/js/')
contenuto = driver.page_source
driver.quit()
Nota poetica
Con Selenium, il browser è il tuo pennello, che dipinge la pagina come la vedrebbe l'utente umano: JavaScript, CSS e tutte le sottili sfumature dell'interattività.
Vantaggi e svantaggi
Caratteristica | Professionisti | Contro |
---|---|---|
Rendering JS | Gestisce qualsiasi contenuto dinamico | Pesante sulle risorse |
Rotazione proxy | Maschera efficacemente l'IP | I proxy possono rallentare o bloccare il browser |
Rilevamento | Più simile all'uomo, meno rilevabile | I proxy gratuiti sono spesso bloccati dai grandi siti |
Flusso di lavoro 3: Puppeteer con ProxyChain per gli appassionati di Node.js
Ingredienti
Passi
- Acquisisci proxy gratuiti
Javascript
const axios = require('axios');
funzione asincrona getProxies() {
const res = await axios.get('https://www.proxy-list.download/api/v1/get?type=https');
restituisci res.data.split('\r\n').filter(Booleano);
}
- Utilizzare ProxyChain per ruotare i proxy con Puppeteer
``javascript
const burattinaio = require('burattinaio');
const ProxyChain = require('proxy-chain');
(asincrono () => {
const proxy = attendono getProxies();
per (const proxyUrl dei proxy) {
const anonymizedProxy = await ProxyChain.anonymizeProxy(http://${proxyUrl}
);
const browser = await puppeteer.launch({
argomenti: [--proxy-server=${proxy anonimizzato}
, '–no-sandbox', '–disable-setuid-sandbox'],
senza testa: vero,
});
const page = await browser.newPage();
Tentativo {
attendi la pagina.goto('https://quotes.toscrape.com/js/', {waitUntil: 'networkidle2'});
const content = attendi page.content();
// Contenuto del processo…
} cattura (e) {
// Salta i proxy errati
}
attendi browser.close();
}
})();
“`
Vantaggi e svantaggi
Caratteristica | Professionisti | Contro |
---|---|---|
Automazione | Scripting robusto in Node.js | Dipendenza da Node.js |
Rotazione proxy | ProxyChain gestisce i guasti | I proxy gratuiti sono spesso instabili/lenti |
Contenuto dinamico | Puppeteer esegue il rendering di tutti i JS | Velocità limitata dalla velocità del proxy |
Workflow 4: Pianificazione intelligente delle richieste con Scrapy + middleware proxy gratuito
Ingredienti
- Raschiato
- proxy rotanti scrapy
- Elenchi proxy gratuiti (proxyscrape.com)
Passi
- Installa Middleware
pip installa scrapy-rotating-proxies
- Configura le impostazioni di Scrapy
pitone
Impostazioni #.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
- Popola l'elenco dei proxy
Scarica e salva i proxy su proxy.txt
:
https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=1000&country=all&ssl=all&anonymity=all
- Raschiare con Scrapy Spider
Scrapy, con proxy rotanti, si muove in punta di piedi nel giardino dei contenuti dinamici. Per JS completo, usa drammaturgo-stravagante:
battere
pip install scrapy-playwright
E nel tuo ragno:
"pitone
importare scrapy
classe QuotesSpider(scrapy.Spider):
nome = “virgolette”
start_urls = ['https://quotes.toscrape.com/js/']
def start_requests(self): per url in self.start_urls: yield scrapy.Request(url, meta={"playwright": True}) def parse(self, response): per citazione in response.css("div.quote"): yield { "text": quote.css("span.text::text").get(), "author": quote.css("small.author::text").get(), }
“`
Vantaggi e svantaggi
Caratteristica | Professionisti | Contro |
---|---|---|
Velocità | Pianificazione efficiente delle richieste | Curva di apprendimento per Scrapy |
Rotazione proxy | Il middleware gestisce i divieti | I proxy gratuiti sono meno affidabili |
Supporto JS | Con Playwright, gestisce JS completo | Configurazione pesante |
Flusso di lavoro 5: Scraping orientato alle API tramite gateway proxy gratuiti
Ingredienti
- API di condivisione Web (livello gratuito limitato)
- Piano gratuito di ScraperAPI (uso limitato)
Passi
- Ottieni la chiave API o l'endpoint proxy
Registrati e ottieni un endpoint gratuito.
- Richieste di instradamento tramite gateway proxy
Per ScraperAPI:
pitone
api_key = 'LA_TUA_API_KEY'
url = f'http://api.scraperapi.com/?api_key={api_key}&url=https://quotes.toscrape.com/js/'
risposta = richieste.get(url)
Per i proxy di condivisione Web, utilizzare come negli esempi precedenti.
Vantaggi e svantaggi
Caratteristica | Professionisti | Contro |
---|---|---|
Affidabilità | Proxy gestiti, meno tempi di inattività | Richieste gratuite limitate |
Facilità d'uso | Rotazione proxy degli abstract | Potrebbe bloccare determinati siti |
Contenuto dinamico | Alcune API eseguono il rendering di JS prima di restituire | Livelli a pagamento per un uso intenso |
Tabella riassuntiva comparativa
Flusso di lavoro | Supporto JS dinamico | Rotazione proxy | Affidabilità | Limitazioni gratuite | Miglior caso d'uso |
---|---|---|---|---|---|
Richieste + Proxy gratuiti | Basso | Manuale | Basso | Proxy bloccati/lenti | API XHR semplici |
Selenio + proxy gratuiti | Alto | Manuale | Medio | Proxy bloccati, CPU elevata | Siti JS complessi, su piccola scala |
Burattinaio + ProxyChain | Alto | Automatizzato | Medio | Frequenti errori del proxy | Automazione Node.js |
Scrapy + Proxy rotanti | Alto (con drammaturgo) | Automatizzato | Medio | Configurazione middleware, proxy lenti | Scraping avanzato e scalabile |
Gateway API proxy | Alto (dipende dall'API) | Automatizzato | Alto | Richieste limitate, registrazione necessaria | Raschiatura affidabile e una tantum |
Risorse
- lista-proxy-gratuita.net
- sslproxies.org
- proxy-list.download
- proxyscrape.com/free-proxy-list
- proxy rotanti scrapy
- drammaturgo-stravagante
- puppeteer-extra-plugin-proxy
- Elenco proxy gratuiti per la condivisione Web
- ScraperAPI
Lascia che il tuo codice sia lo scalpello e i tuoi proxy il marmo: scolpisci con pazienza, perché ogni pagina dinamica è una scultura digitale, in attesa di essere rivelata sotto la superficie.
Commenti (0)
Non ci sono ancora commenti qui, potresti essere il primo!