Créer un spider Scrapy
Créez un projet Scrapy, écrivez un spider et suivez automatiquement les liens.
Créer un spider Scrapy est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que Scrapy ?
Scrapy est un framework complet d'extraction de données web, doté de fonctions intégrées d'exploration asynchrone, de chaînes de traitement d'éléments, d'intergiciels et d'exportateurs.
# pip install scrapy
# Create a project:
# scrapy startproject myspider
# myspider/
# scrapy.cfg
# myspider/
# settings.py
# spiders/
# quotes_spider.pyCréer un Spider
Créez une sous-classe de scrapy.Spider, définissez name et start_urls, puis implémentez 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(),
}Sélecteurs CSS et XPath
Utilisez response.css("selector") ou response.xpath("//xpath") pour extraire des données. .get() renvoie la première correspondance ; .getall() les renvoie toutes.
def parse(self, response):
# CSS:
titles = response.css("h2.title::text").getall()
# XPath:
links = response.xpath("//a/@href").getall()
yield {"titles": titles, "links": links}Suivre des liens
Produisez un scrapy.Request pour suivre un lien et analyser la page suivante.
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)Éléments et ItemLoaders
Définissez des classes Item pour structurer les données extraites et utilisez ItemLoader pour nettoyer et transformer les champs.
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 itemExécuter le Spider
Exécutez-le depuis le répertoire du projet. Exportez les données au format JSON, CSV ou via une chaîne de traitement personnalisée.
# 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"Paramètres : DOWNLOAD_DELAY et CONCURRENT_REQUESTS
Respectez les serveurs : ajoutez des délais et limitez le nombre de requêtes simultanées pour éviter de les surcharger.
# 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.txtIntergiciels
Les intergiciels interceptent les requêtes et les réponses. Utilisez ceux qui sont intégrés pour la rotation des agents utilisateur, les nouvelles tentatives et les cookies.
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
"myspider.middlewares.RotateUserAgentMiddleware": 400,
}Chaînes de traitement des éléments
Les chaînes de traitement traitent les éléments après l'extraction : elles nettoient et valident les données, suppriment les doublons et les enregistrent dans une base de données.
# 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 itemGérer la connexion
Utilisez FormRequest de Scrapy pour envoyer un formulaire de connexion et conserver le cookie de session.
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 pour les pages JS
Le module scrapy-playwright intègre Playwright à Scrapy pour les pages rendues avec 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})Vérification rapide
Que fait response.follow(href, callback) dans un Spider Scrapy ?
Récapitulatif
Les spiders Scrapy dérivent de scrapy.Spider, déclarent start_urls, puis produisent des éléments ou d'autres objets Request depuis parse(). Utilisez des sélecteurs CSS/XPath, respectez les serveurs avec DOWNLOAD_DELAY et utilisez des chaînes de traitement pour conserver les données.
Questions Fréquemment Posées
La leçon « Créer un spider Scrapy » est-elle gratuite ?
Oui — le texte complet de « Créer un spider Scrapy » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Créer un spider Scrapy » ?
Créez un projet Scrapy, écrivez un spider et suivez automatiquement les liens. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Python Academy ?
Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Créer un spider Scrapy » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?
Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Requêtes HTTP avec requests et httpx
- Analyser du HTML avec BeautifulSoup
- Créer un spider Scrapy
- Gérer JavaScript et les mesures anti-extraction