0Pricing
Python Academy · Leçon

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.py

Cré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 item

Exé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.txt

Intergiciels

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 item

Gé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

  1. Requêtes HTTP avec requests et httpx
  2. Analyser du HTML avec BeautifulSoup
  3. Créer un spider Scrapy
  4. Gérer JavaScript et les mesures anti-extraction
← Retour à Python Academy