Creazione di uno spider Scrapy
Crei un progetto Scrapy, scriva uno spider e segua automaticamente i collegamenti.
Creazione di uno spider Scrapy è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Che cos'è Scrapy
Scrapy è un framework completo per il web scraping, con crawling asincrono integrato, pipeline degli item, middleware ed esportatori.
# pip install scrapy
# Create a project:
# scrapy startproject myspider
# myspider/
# scrapy.cfg
# myspider/
# settings.py
# spiders/
# quotes_spider.pyCreazione di uno spider
Estenda scrapy.Spider, imposti name e start_urls, quindi implementi parse().
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {
"text": quote.css("span.text::text").get(),
"author": quote.css("small.author::text").get(),
}Selettori CSS e XPath
Utilizzi response.css("selector") o response.xpath("//xpath") per estrarre i dati. .get() restituisce la prima corrispondenza; .getall() le restituisce tutte.
def parse(self, response):
# CSS:
titles = response.css("h2.title::text").getall()
# XPath:
links = response.xpath("//a/@href").getall()
yield {"titles": titles, "links": links}Seguire i link
Restituisca con yield una scrapy.Request per seguire un link e analizzare la pagina successiva.
import scrapy
class Spider(scrapy.Spider):
name = "crawler"
start_urls = ["https://quotes.toscrape.com"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {"text": quote.css("span.text::text").get()}
next_page = response.css("li.next a::attr(href)").get()
if next_page:
yield response.follow(next_page, self.parse)Item e ItemLoader
Definisca classi Item per strutturare i dati acquisiti e utilizzi ItemLoader per pulire e trasformare i campi.
import scrapy
class ProductItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
url = scrapy.Field()
def parse(self, response):
item = ProductItem()
item["name"] = response.css("h1::text").get(strip=True)
item["price"] = response.css(".price::text").re_first(r"[\d.]+")
item["url"] = response.url
yield itemEsecuzione dello spider
Esegua lo spider dalla directory del progetto. Esporti i dati in JSON, CSV o tramite una pipeline personalizzata.
# Run and print to console:
# scrapy crawl quotes
# Save to JSON:
# scrapy crawl quotes -o quotes.json
# Save to CSV:
# scrapy crawl quotes -o quotes.csv
# Scrapy shell for interactive testing:
# scrapy shell "https://quotes.toscrape.com"Impostazioni: DOWNLOAD_DELAY e CONCURRENT_REQUESTS
Rispetti i server: aggiunga ritardi e limiti le richieste concorrenti per evitare di sovraccaricarli.
# settings.py
DOWNLOAD_DELAY = 1 # 1 second between requests
CONCURRENT_REQUESTS = 8 # max 8 at a time
CONCURRENT_REQUESTS_PER_DOMAIN = 2
ROBOTSTXT_OBEY = True # respect robots.txtMiddleware
I middleware intercettano richieste e risposte. Utilizzi quelli integrati per la rotazione dello user agent, i nuovi tentativi e i cookie.
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
"myspider.middlewares.RotateUserAgentMiddleware": 400,
}Pipeline degli item
Le pipeline elaborano gli item dopo lo scraping: puliscono i dati, li convalidano, eliminano i duplicati e li salvano in un database.
# pipelines.py
class CleanPipeline:
def process_item(self, item, spider):
item["name"] = item["name"].strip()
return item
class DBPipeline:
def open_spider(self, spider):
self.conn = connect_db()
def process_item(self, item, spider):
self.conn.insert(dict(item))
return itemGestione dell'accesso
Utilizzi FormRequest di Scrapy per inviare un modulo di accesso e mantenere il cookie di sessione.
import scrapy
class AuthSpider(scrapy.Spider):
name = "auth"
login_url = "https://example.com/login"
def start_requests(self):
yield scrapy.Request(self.login_url, self.login)
def login(self, response):
yield scrapy.FormRequest.from_response(
response,
formdata={"user": "me", "pass": "secret"},
callback=self.parse
)scrapy-playwright per le pagine JS
Il plugin scrapy-playwright integra Playwright in Scrapy per le pagine renderizzate da JavaScript.
# pip install scrapy-playwright
# playwright install
# settings.py:
# DOWNLOAD_HANDLERS = {
# "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# }
# In spider:
# yield scrapy.Request(url, meta={"playwright": True})Verifica rapida
Che cosa fa response.follow(href, callback) in uno spider Scrapy?
Riepilogo
Gli spider Scrapy estendono scrapy.Spider, dichiarano start_urls e producono con yield item o ulteriori Request da parse(). Utilizzi i selettori CSS/XPath, rispetti le buone pratiche con DOWNLOAD_DELAY e utilizzi le pipeline per rendere persistenti i dati.
Domande Frequenti
La lezione «Creazione di uno spider Scrapy» è gratuita?
Sì — il testo completo di «Creazione di uno spider Scrapy» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Creazione di uno spider Scrapy»?
Crei un progetto Scrapy, scriva uno spider e segua automaticamente i collegamenti. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Creazione di uno spider Scrapy»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Richieste HTTP con requests e httpx
- Parsing dell'HTML con BeautifulSoup
- Creazione di uno spider Scrapy
- Gestione di JavaScript e misure anti-scraping