0Pricing
Python Academy · Lektion

Einen Scrapy-Spider erstellen

Erstellen Sie ein Scrapy-Projekt, schreiben Sie einen Spider und folgen Sie automatisch Links.

Einen Scrapy-Spider erstellen ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Scrapy?

Scrapy ist ein umfassendes Web-Scraping-Framework mit integriertem asynchronem Crawling, Item-Pipelines, Middleware und Exportern.

# pip install scrapy

# Create a project:
# scrapy startproject myspider

# myspider/
#   scrapy.cfg
#   myspider/
#     settings.py
#     spiders/
#       quotes_spider.py

Einen Spider erstellen

Leiten Sie eine Klasse von scrapy.Spider ab, setzen Sie name und start_urls und implementieren Sie anschließend 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(),
            }

CSS- und XPath-Selektoren

Verwenden Sie response.css("selector") oder response.xpath("//xpath"), um Daten zu extrahieren. .get() gibt den ersten Treffer zurück, .getall() alle Treffer.

def parse(self, response):
    # CSS:
    titles = response.css("h2.title::text").getall()

    # XPath:
    links = response.xpath("//a/@href").getall()

    yield {"titles": titles, "links": links}

Links folgen

Geben Sie eine scrapy.Request mit yield zurück, um einem Link zu folgen und die nächste Seite zu analysieren.

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)

Items und ItemLoader

Definieren Sie Item-Klassen, um extrahierte Daten zu strukturieren, und verwenden Sie ItemLoader, um Felder zu bereinigen und umzuwandeln.

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

Den Spider ausführen

Führen Sie den Spider aus dem Projektverzeichnis aus. Exportieren Sie die Daten nach JSON, CSV oder über eine benutzerdefinierte Pipeline.

# 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"

Einstellungen: DOWNLOAD_DELAY und CONCURRENT_REQUESTS

Verhalten Sie sich rücksichtsvoll: Fügen Sie Verzögerungen hinzu und begrenzen Sie gleichzeitige Anfragen, damit Server nicht überlastet werden.

# 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

Middleware

Middleware greift in Anfragen und Antworten ein. Verwenden Sie integrierte Middleware für User-Agent-Rotation, Wiederholungsversuche und Cookies.

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
    "scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
    "myspider.middlewares.RotateUserAgentMiddleware": 400,
}

Item-Pipelines

Pipelines verarbeiten Items nach dem Scraping: Sie bereinigen und validieren Daten, entfernen Duplikate und speichern die Daten in einer Datenbank.

# 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

Anmeldung verarbeiten

Verwenden Sie Scrapys FormRequest, um ein Anmeldeformular abzusenden und das Sitzungscookie beizubehalten.

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 für JavaScript-Seiten

Das scrapy-playwright-Plugin integriert Playwright in Scrapy für JavaScript-gerenderte Seiten.

# 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})

Schnelltest

Was bewirkt response.follow(href, callback) in einem Scrapy-Spider?

Zusammenfassung

Scrapy-Spider leiten sich von scrapy.Spider ab, deklarieren start_urls und geben aus parse() Items oder weitere Requests mit yield zurück. Verwenden Sie CSS-/XPath-Selektoren, verhalten Sie sich mit DOWNLOAD_DELAY rücksichtsvoll und nutzen Sie Pipelines, um Daten dauerhaft zu speichern.

Häufig gestellte Fragen

Ist die Lektion „Einen Scrapy-Spider erstellen“ kostenlos?

Ja — der vollständige Text von „Einen Scrapy-Spider erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Einen Scrapy-Spider erstellen“?

Erstellen Sie ein Scrapy-Projekt, schreiben Sie einen Spider und folgen Sie automatisch Links. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Einen Scrapy-Spider erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. HTTP-Anfragen mit requests und httpx
  2. HTML mit BeautifulSoup parsen
  3. Einen Scrapy-Spider erstellen
  4. JavaScript und Maßnahmen gegen Scraping
← Zurück zu Python Academy