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.pyEinen 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 itemDen 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.txtMiddleware
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 itemAnmeldung 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
- HTTP-Anfragen mit requests und httpx
- HTML mit BeautifulSoup parsen
- Einen Scrapy-Spider erstellen
- JavaScript und Maßnahmen gegen Scraping