# Come fare scraping delle inserzioni di Craigslist: Veicoli, Affitti e Lavori

Craigslist è una miniera d'oro di dati protetta da limiti di frequenza IP aggressivi. Ecco la struttura degli URL per città, la matematica del paging a 120 per pagina, il collegamento RSS che la maggior parte delle persone ignora e la configurazione del proxy che ti tiene fuori dalla lista dei ban.

Craigslist contiene un'enorme quantità di dati pubblici utilizzabili — auto usate, affitti di appartamenti, lavori, articoli in vendita, servizi — distribuiti su centinaia di siti cittadini. È anche un muro per principianti di CAPTCHA e ban IP, perché Craigslist limita severamente le richieste per indirizzo IP. La buona notizia: la struttura degli URL del sito è semplice e prevedibile, c'è un collegamento RSS che la maggior parte delle guide ignora, e il problema del blocco è quasi interamente un problema di igiene IP. Questa guida copre il modello di URL per città, la matematica del paging, il parsing, il percorso RSS e la configurazione del proxy che tiene uno scraper fuori dalla lista dei ban. Fai scraping per uso personale o di ricerca, rispetta i termini di Craigslist e considera queste informazioni generali piuttosto che consigli legali.

## Il modello di URL è tutto

Craigslist si divide per sottodominio di città e codice di categoria, e tutto il resto sono parametri di query. Impara la forma una volta e puoi mirare a qualsiasi città e sezione: `https://{city}.craigslist.org/search/{category}?query={q}`. I codici di categoria sono brevi — `sss` per tutto in vendita, `cto` per auto da privati, `apa` per appartamenti, `ggg` per lavori. Aggiungi `min_price`, `max_price` e altri filtri come parametri. La paginazione utilizza il parametro `s`, e ogni pagina mostra 120 risultati — quindi la seconda pagina è `s=120`, la terza è `s=240`, e così via.

```python
import requests
from bs4 import BeautifulSoup

PROXY = "http://USER:PASS@residentialpremium.quantumproxies.io:8080"
PROXIES = {"http": PROXY, "https": PROXY}
UA = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
      "(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36")

def build_url(city, category, query, page=0, min_price=None, max_price=None):
    base = f"https://{city}.craigslist.org/search/{category}"
    params = [f"query={query}"]
    if min_price: params.append(f"min_price={min_price}")
    if max_price: params.append(f"max_price={max_price}")
    if page:      params.append(f"s={page * 120}")   # 120 results per page
    return base + "?" + "&".join(params)

url = build_url("minneapolis", "cto", "bmw", page=0, max_price=8000)
r = requests.get(url, headers={"User-Agent": UA}, proxies=PROXIES, timeout=20)
```

## Parsing delle inserzioni

Le righe dei risultati di ricerca sono contrassegnate con un set stabile di classi — il blocco dell'inserzione è `.result-info`, con `.result-title`, `.result-price` e `.result-date` all'interno. Proteggi ogni campo, perché non tutte le inserzioni hanno un prezzo:

```python
def parse_listings(html):
    soup = BeautifulSoup(html, "html.parser")
    out = []
    for row in soup.select(".result-info"):
        title_el = row.select_one(".result-title")
        price_el = row.select_one(".result-price")
        date_el  = row.select_one(".result-date")
        if not title_el:
            continue
        out.append({
            "title": title_el.get_text(strip=True),
            "url":   title_el.get("href"),
            "price": price_el.get_text(strip=True) if price_el else None,
            "date":  date_el.get("datetime") if date_el else None,
        })
    return out

listings = parse_listings(r.text)
print(len(listings), "listings on this page")
```

Per record più ricchi — chilometraggio di un'auto, camere da letto di un affitto — segui l'URL di ogni inserzione e analizza la pagina dei dettagli. Questo raddoppia il numero di richieste, quindi è esattamente dove il ritmo e la rotazione iniziano a contare.

![Un URL di ricerca Craigslist scomposto nelle sue parti: il sottodominio della città minneapolis, il codice di categoria cto, i filtri query e max_price e l'offset s; la scheda spiega ciascuno: sottodominio della città, codici di categoria sss, cto, apa e ggg, filtri e paginazione a passi di 120.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335182/blog/generated/qp-b9-048-diag1.png)
*Gli URL di Craigslist sono completamente prevedibili: sottodominio di città, codice di categoria, quindi query e il parametro s a passi di 120.*

## Il collegamento RSS che la maggior parte delle guide ignora

Craigslist non ha un'API pubblica generale, ma espone un feed RSS per i risultati di ricerca — aggiungi `&format=rss` a qualsiasi URL di ricerca e ottieni un feed XML strutturato invece di HTML da analizzare. È più leggero, meno probabile che attivi le euristiche anti-bot rispetto al caricamento ripetuto della pagina completa dei risultati, ed è ideale per il monitoraggio: interroga una ricerca salvata a intervalli regolari e confronta per nuovi elementi. Restituisce meno campi rispetto alla pagina HTML (titolo, link, timestamp), quindi usalo per il monitoraggio della freschezza e torna all'HTML quando hai bisogno di prezzo e dettagli.

```python
import feedparser

# Any Craigslist search becomes a feed with &format=rss
feed_url = build_url("sfbay", "apa", "loft", max_price=3500) + "&format=rss"
raw = requests.get(feed_url, headers={"User-Agent": UA}, proxies=PROXIES, timeout=20)
feed = feedparser.parse(raw.content)

for entry in feed.entries[:5]:
    print(entry.updated, entry.title, entry.link)
```

## Perché Craigslist ti banna e come evitare di essere bannato

Craigslist impila diverse difese, ma condividono una radice: traccia le richieste per indirizzo IP e blocca gli indirizzi che colpiscono troppo duramente. Le misure specifiche sono il rate limiting IP, le sfide CAPTCHA sul traffico sospetto, il monitoraggio User-Agent, il tracciamento delle sessioni e i ban temporanei IP. Ognuna di esse è sconfitta apparendo come molti visitatori ordinari piuttosto che una macchina implacabile.

- **Ruota gli IP e distribuisci il carico** — un singolo IP che sfoglia una città è la via più veloce per un ban. La rotazione per richiesta su un pool residenziale significa che nessuna uscita sembra anormale.
- **Regola il ritmo delle richieste** — 1-2 richieste al secondo è un limite sicuro per piccole esecuzioni; aggiungi jitter e rallenta non appena vedi un CAPTCHA o 403.
- **Ruota lo User-Agent** — un UA costante o predefinito è un indizio; varialo e mantienilo aggiornato.
- **Una sessione per città** — inizia nuovi cookie per città o per esecuzione piuttosto che portare un'identità attraverso tutto.

Poiché i ban sono basati su IP, l'IP di uscita sta facendo la maggior parte del lavoro. Un pool di proxy residenziali pulito sembra connessioni domestiche reali, e la rotazione per richiesta distribuisce un crawl multi-città così sottilmente che i contatori per IP di Craigslist non si attivano mai. Se stai raccogliendo dati in molte città, la nostra guida su [come risolvere i limiti di frequenza 429](https://quantumproxies.io/blog/fix-429-too-many-requests-scraping) copre il lato del ritmo e del budget di concorrenza, e [la checklist anti-ban](https://quantumproxies.io/blog/avoid-ip-ban-web-scraping) lega tutto insieme.

[Fai scraping di Craigslist su IP residenziali puliti](https://quantumproxies.io/residential-proxies)

## Scalare attraverso le città

Il vero potere dei dati di Craigslist è il confronto tra città — la stessa auto usata o affitto prezzato in una dozzina di metropoli. Cicla la tua lista di città, associa un'uscita rotante fresca per città, limita la concorrenza e memorizza la città accanto a ogni record. Per la ricerca su veicoli e affitti in particolare, gli stessi schemi alimentano una pipeline di comparazione; vedi le nostre guide su [scraping delle inserzioni di auto](https://quantumproxies.io/blog/scrape-car-listings-autotrader-carscom) e [dati immobiliari](https://quantumproxies.io/blog/real-estate-data-scraping-with-proxies) per trasformare le inserzioni grezze in segnali di mercato.

![Il rischio di ban su Craigslist in base alla configurazione: un solo IP che sfoglia le pagine di una città viene bannato più in fretta, un IP datacenter con uno User-Agent costante incontra CAPTCHA o 403, le uscite residenziali rotanti a 1-2 richieste al secondo non fanno mai scattare nulla; la scheda elenca le soluzioni, dalla rotazione per richiesta a una sessione nuova per ogni città.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335183/blog/generated/qp-b9-048-diag2.png)
*Ogni difesa di Craigslist è un problema di IP e ritmo — ruota le uscite residenziali e rimani sotto 1-2 richieste al secondo.*

## Domande frequenti

### Puoi fare scraping di Craigslist?

Sì — le pagine di ricerca e inserzioni pubbliche sono scrappabili, e Craigslist espone anche un feed RSS per le ricerche. L'ostacolo è il rate limiting aggressivo per IP, non il parsing. Ruota gli IP residenziali, regola il ritmo delle richieste a 1-2 al secondo, e puoi raccogliere dati su veicoli, affitti, lavori e in vendita in modo affidabile. Rispetta i termini di Craigslist e fai scraping solo di dati pubblici.

### Craigslist ha un'API?

Non esiste un'API pubblica generale per i dati, ma ogni URL di ricerca può restituire un feed RSS aggiungendo `&format=rss`. Questo ti dà un feed XML strutturato con titoli, link e timestamp — perfetto per monitorare nuove inserzioni — mentre le pagine HTML contengono i campi più completi come prezzo e descrizione.

### Come evito di essere bannato per IP facendo scraping di Craigslist?

Craigslist banna per frequenza IP, quindi le soluzioni riguardano tutte la distribuzione e il rallentamento del carico: ruota gli IP residenziali per richiesta, mantieni 1-2 richieste al secondo con jitter, ruota il tuo User-Agent, usa una sessione fresca per città e rallenta immediatamente quando vedi un CAPTCHA o 403. Un IP del datacenter che martella una città viene bannato più velocemente.

### Come funziona la paginazione di Craigslist?

Craigslist mostra 120 risultati per pagina e pagine con il parametro di query `s` come offset. La prima pagina omette `s`, la seconda pagina è `s=120`, la terza `s=240`, e così via. Incrementa a passi di 120 fino a quando una pagina restituisce meno di 120 risultati, il che segna la fine.

Craigslist è facile da leggere e facile da essere bannati — e il secondo problema riguarda interamente l'igiene IP. Comprendi il modello di URL, usa RSS per il monitoraggio, pagina a passi di 120 e instrada tutto attraverso IP residenziali rotanti a un ritmo umano. Fai questo e i CAPTCHA semplicemente smettono di apparire.

[Inizia con proxy residenziali rotanti](https://quantumproxies.io/residential-proxies)
