Ti sei mai chiesto perché il tuo spider Scrapy sputato dall’IA funziona alla perfezione su una pagina demo, ma si strozza peggio di un subacqueo alle prime armi a 30 metri quando lo scateni sul web selvaggio?
Non sono i modelli. Quelli sono bestie ormai. No, il colpevole è sempre lo stesso: contesto schifoso, prompt pigri, zero comprensione delle viscere di Scrapy. Ma aspetta. Immagina un’IA che vive nella directory del tuo progetto, scruta ogni file da items.py ai tuoi fixture HTML, e poi sforna spider che vanno davvero in produzione. Ecco opencode. Sta ribaltando lo scraping come il browser ha fatto per lo sviluppo web nel ‘94.
Perché Opencode batte ogni altro coder IA?
Gli agenti generici? Sono come quell’amico che ti fa una torta su richiesta vaga tipo “falla al cioccolato” — sa di buono, ma crolla sotto il suo peso. Opencode? Nativo del terminale, agnostico sui modelli, infila il codice chirurgicamente nel tuo scheletro Scrapy esistente. Niente roulette copia-incolla. Vede le tue convenzioni in AGENTS.md, i tuoi page object scrapy-poet, persino quella Zyte API key nascosta in .env. D’un tratto, gli spider non sono più hack; sono macchine da produzione.
Eccola la mia opinione hot, quella che nessuno urla ancora: opencode non è solo uno strumento, è l’assassino degli IDE per lo scraping. Ricordi come Vim ed Emacs hanno trasformato il codice in documenti viventi? Questo fa lo stesso per gli spider. Scommettiamoci: tra due anni, ogni scraper pro inizierà con opencode, rendendo i selettori fragili reliquie da museo. Stiamo assistendo al cambiamento di piattaforma nello scraping, gente — l’IA come tuo co-pilota nelle trincee del terminale.
Una riga per governarli tutti: curl -fsSL https://opencode.ai/install | bash. Boom. O installalo via brew su Mac/Linux per update che durano. Su Windows, WSL è la via — choco funziona, ma è come scraping nella melassa.
Collega il tuo modello. /connect nel TUI. Scegli bestie con contesto grande — minimo 64k token, perché i tuoi fixture da soli ne divorano 20k come popcorn.
Prima lo scheletro: scrapy startproject myproject, cd dentro, opencode init. Quello genera AGENTS.md. Riempilo. Committa. Ecco un gioiello dal playbook:
Convenzioni del progetto
- Python 3.12, Scrapy 2.12
- Tutti gli spider usano page object scrapy-poet (mai parse dentro la classe spider)
- Le classi Item sono definite in items.py con dataclasses
- Zyte API configurata via scrapy-zyte-api; ZYTE_API_KEY in .env
Quello? La tua salsa segreta. Zero contesto da ripetere ogni volta.
Si possono davvero spingere i prompt di Opencode alla perfezione Scrapy?
Richiesta generica: “Scrivi uno spider per books.toscrape.com.” Risultato? Script meh, non Scrapy. Correggi. Sii specifico, spietato:
“Crea uno spider Scrapy per https://books.toscrape.com che: - Usa un page object scrapy-poet chiamato BookListPage per le pagine lista e BookDetailPage per i dettagli - Estrae: title, price, availability, star rating e product URL - Gestisce la paginazione seguendo il link “next” - Salva i risultati in un BookItem dataclass in items.py - Non mette logica CSS selector dentro la classe spider. Inizia con i page object in pages.py, poi scrivi lo spider in spiders/books.py.”
Vedi quell’ultima parte? Oro. Gli agenti adorano inlineare i selettori — uccide la testabilità, l’anima di scrapy-poet. Bandiscilo subito.
Selettori troppo fragili? Chiedi giustificazioni: “Scrivi i CSS selector per BookDetailPage. Per ogni campo, spiega perché hai scelto quel selector rispetto ad alternative. Preferisci selettori basati su attributi (tipo [itemprop] o [data-*]) rispetto a nomi di classi quando ci sono entrambe le opzioni.”
Risultato? Robusto. Tipo [itemprop=”name”] invece di .product-title — sopravvive ai redesign.
Ma attenzione — trappole. L’IA allucina dipendenze a volte. Fai sempre scrapy check dopo la generazione. Testa con `scrapy crawl books -s LOG_LEVEL=DEB