0Pricing
Python Academy · Pelajaran

Membangun Spider Scrapy

Buat proyek Scrapy, tulis spider, dan ikuti tautan secara otomatis.

Membangun Spider Scrapy adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Apa Itu Scrapy?

Scrapy adalah framework scraping web lengkap dengan perayapan asinkron, pipeline item, middleware, dan pengekspor bawaan.

# pip install scrapy

# Create a project:
# scrapy startproject myspider

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

Membuat Spider

Buat subkelas dari scrapy.Spider, tetapkan name dan start_urls, lalu implementasikan 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(),
            }

Selektor CSS dan XPath

Gunakan response.css("selector") atau response.xpath("//xpath") untuk mengekstrak data. .get() mengembalikan kecocokan pertama; .getall() mengembalikan semuanya.

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

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

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

Mengikuti Tautan

Hasilkan scrapy.Request untuk mengikuti tautan dan mengurai halaman berikutnya.

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)

Item dan ItemLoader

Definisikan kelas Item untuk menyusun data hasil scraping, lalu gunakan ItemLoader untuk membersihkan dan mengubah field.

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

Menjalankan Spider

Jalankan dari direktori proyek. Ekspor ke JSON, CSV, atau pipeline khusus.

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

Pengaturan: DOWNLOAD_DELAY dan CONCURRENT_REQUESTS

Bersikap sopan: tambahkan jeda dan batasi permintaan bersamaan agar tidak membebani server.

# 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 mencegat permintaan dan respons. Gunakan middleware bawaan untuk rotasi agen pengguna, percobaan ulang, dan cookie.

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

Pipeline Item

Pipeline memproses item setelah scraping: membersihkan data, memvalidasi, menghapus duplikasi, dan menyimpannya ke basis data.

# 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

Menangani Login

Gunakan FormRequest milik Scrapy untuk mengirim formulir login dan mempertahankan cookie sesi.

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 untuk Halaman JS

Plugin scrapy-playwright mengintegrasikan Playwright ke dalam Scrapy untuk halaman yang dirender oleh 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})

Pemeriksaan Singkat

Apa yang dilakukan response.follow(href, callback) dalam spider Scrapy?

Ringkasan

Spider Scrapy membuat subkelas dari scrapy.Spider, mendeklarasikan start_urls, lalu menghasilkan item atau Request lanjutan dari parse(). Gunakan selektor CSS/XPath, bersikap sopan dengan DOWNLOAD_DELAY, dan gunakan pipeline untuk menyimpan data.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun Spider Scrapy” gratis?

Ya — teks lengkap “Membangun Spider Scrapy” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membangun Spider Scrapy”?

Buat proyek Scrapy, tulis spider, dan ikuti tautan secara otomatis. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Membangun Spider Scrapy” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Permintaan HTTP dengan requests dan httpx
  2. Mengurai HTML dengan BeautifulSoup
  3. Membangun Spider Scrapy
  4. Menangani JavaScript dan Tindakan Anti-Scraping
← Kembali ke Python Academy