Bygge en Scrapy-spider
Opprett et Scrapy-prosjekt, skriv en spider og følg lenker automatisk.
Bygge en Scrapy-spider er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva er Scrapy?
Scrapy er et komplett rammeverk for web scraping med innebygd asynkron crawling, item-pipelines, mellomvare og eksportører.
# pip install scrapy
# Create a project:
# scrapy startproject myspider
# myspider/
# scrapy.cfg
# myspider/
# settings.py
# spiders/
# quotes_spider.pyOpprette en spider
Arv fra scrapy.Spider, angi name og start_urls, og implementer deretter 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- og XPath-selektorer
Bruk response.css("selector") eller response.xpath("//xpath") til å hente ut data. .get() returnerer det første treffet, mens .getall() returnerer alle.
def parse(self, response):
# CSS:
titles = response.css("h2.title::text").getall()
# XPath:
links = response.xpath("//a/@href").getall()
yield {"titles": titles, "links": links}Følge lenker
Yield en scrapy.Request for å følge en lenke og analysere neste side.
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 og ItemLoaders
Definer Item-klasser for å strukturere data som er hentet ut, og bruk ItemLoader til å rense og transformere felt.
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 itemKjøre spideren
Kjør fra prosjektmappen. Eksporter til JSON, CSV eller en egendefinert 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"Innstillinger: DOWNLOAD_DELAY og CONCURRENT_REQUESTS
Vær hensynsfull: legg inn forsinkelser og begrens antallet samtidige forespørsler for å unngå å overbelaste servere.
# 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.txtMellomvare
Mellomvare fanger opp forespørsler og svar. Bruk innebygde mellomvarer for rotering av user-agent, nye forsøk og informasjonskapsler.
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
"myspider.middlewares.RotateUserAgentMiddleware": 400,
}Item-pipelines
Pipelines behandler items etter scraping: renser data, validerer, fjerner duplikater og lagrer i en 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 itemHåndtere innlogging
Bruk Scrapys FormRequest til å sende inn et innloggingsskjema og bevare sesjonens informasjonskapsel.
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 for JavaScript-sider
Programtillegget scrapy-playwright integrerer Playwright i Scrapy for JavaScript-genererte sider.
# 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})Hurtigsjekk
Hva gjør response.follow(href, callback) i en Scrapy-spider?
Oppsummering
Scrapy-spidere arver fra scrapy.Spider, deklarerer start_urls og bruker yield til å returnere items eller flere Requests fra parse(). Bruk CSS-/XPath-selektorer, vær hensynsfull med DOWNLOAD_DELAY, og bruk pipelines til å lagre data.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «Bygge en Scrapy-spider» gratis?
Ja – hele teksten i «Bygge en Scrapy-spider» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Bygge en Scrapy-spider»?
Opprett et Scrapy-prosjekt, skriv en spider og følg lenker automatisk. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Bygge en Scrapy-spider»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- HTTP-forespørsler med requests og httpx
- Analysere HTML med BeautifulSoup
- Bygge en Scrapy-spider
- Håndtere JavaScript og tiltak mot scraping