Berbagi teknologi

【Scrapy】 Aturan pengaturan tingkat middleware yang tergores

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Izinkan saya dengan senang hati memainkan kembali peran protagonis dari sebuah cerita indah tertentu
Mainkan peran sebagai kekasih yang berbagi impian Anda selama beberapa tahun terakhir
Mari menjadi kekasih yang tidak menitikkan air mata cinta lagi
Berpura-pura memiliki adegan yang sama seperti sebelumnya
Putar ulang peran protagonis dari cerita yang indah
Mainkan peran sebagai kekasih yang berbagi impian Anda selama beberapa tahun terakhir
Meskipun kamu tidak mengerti, kamu masih sendirian hingga larut malam
Kenakan sweter senyapmu seolah-olah aku dekat denganmu
                     🎵 陈慧娴《傻女》


Scrapy adalah kerangka perayap yang kuat. Dengan menggunakan middleware, pengguna dapat menyesuaikan dan memperluas perilaku perayap. Middleware menyediakan mekanisme untuk permintaan dan tanggapan sebelum dan sesudah pemrosesan, memungkinkan pengguna untuk meningkatkan fungsionalitas crawler tanpa mengubah kode inti.

Di Scrapy, urutan eksekusi middleware ditentukan oleh "prioritas" mereka. Memahami dan mengatur hierarki middleware dengan benar sangat penting untuk membangun crawler yang efisien dan mudah dipelihara.

Apa itu middleware?

Middleware adalah pengait di Scrapy yang memungkinkan pengguna mengeksekusi kode khusus saat memproses permintaan dan tanggapan. Middleware dibagi menjadi dua kategori:

  • Middleware Pengunduh: Menangani permintaan dan tanggapan terkait pengunduh.
  • Spider Middleware: menangani input dan output terkait laba-laba.

Tingkat perangkat lunak menengah

Tingkat middleware menentukan urutan eksekusinya. Scrapy menggunakan nilai integer untuk mewakili level middleware. Semakin kecil nilainya, semakin awal middleware tersebut dieksekusi.

  • Pengunduh Middleware
    Middleware pengunduh berada di antara pengunduh dan mesin Scrapy. Berikut ini contoh konfigurasinya:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

Dalam konfigurasi di atas:

CustomDownloaderMiddleware 的等级为 543
UserAgentMiddleware 的等级为 400
RetryMiddleware 的等级为 500
  • 1
  • 2
  • 3

Urutan eksekusinya adalah sebagai berikut:

UserAgentMiddleware(400)
RetryMiddleware(500)
CustomDownloaderMiddleware(543)
  • 1
  • 2
  • 3

Permintaan berasal dari mesin, melewati middleware tingkat rendah, dan akhirnya mencapai pengunduh. Ketika respons kembali dari pengunduh, pertama-tama respons tersebut melewati middleware tingkat yang lebih tinggi dan akhirnya mencapai mesin.

Perangkat Tengah Laba-laba

Middleware perayap terletak di antara mesin dan perayap. Berikut ini contoh konfigurasinya:

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
}
  • 1
  • 2
  • 3
  • 4
  • 5

Dalam konfigurasi di atas:

CustomSpiderMiddleware 的等级为 543
HttpErrorMiddleware 的等级为 50
OffsiteMiddleware 的等级为 500
  • 1
  • 2
  • 3

Urutan eksekusinya adalah sebagai berikut:

HttpErrorMiddleware(50)
OffsiteMiddleware(500)
CustomSpiderMiddleware(543)
  • 1
  • 2
  • 3

Permintaan berasal dari mesin, melewati middleware tingkat rendah, dan akhirnya mencapai crawler. Ketika respons kembali dari crawler, respons tersebut terlebih dahulu melewati middleware tingkat yang lebih tinggi dan akhirnya mencapai mesin.

Cara mengatur level middleware

Untuk mengatur level middleware, Anda perlu mendefinisikan kamus yang sesuai di file konfigurasi Scrapy settings.py dan menentukan jalur dan level middleware. Misalnya:

DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.CustomDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
}

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.CustomSpiderMiddleware': 543,
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Dalam contoh ini, kami mendefinisikan middleware pengunduh CustomDownloaderMiddleware dan middleware crawler CustomSpiderMiddleware, dan menetapkan levelnya masing-masing ke 543.

Middleware umum dan level defaultnya

Scrapy menyediakan banyak middleware bawaan, masing-masing dengan level default. Berikut adalah beberapa middleware pengunduh yang umum dan level defaultnya:

UserAgentMiddleware: 400
RetryMiddleware: 500
RedirectMiddleware: 600
CookiesMiddleware: 700
  • 1
  • 2
  • 3
  • 4

Untuk middleware crawler, yang umum meliputi:

HttpErrorMiddleware: 50
OffsiteMiddleware: 500
RefererMiddleware: 700
  • 1
  • 2
  • 3

Kesimpulannya

Middleware adalah fitur canggih dalam kerangka Scrapy. Dengan mengatur level middleware dengan benar, Anda dapat mengontrol pemrosesan permintaan dan respons dengan baik. Memahami dan menggunakan aturan pengaturan level middleware dapat membantu membangun sistem crawler yang lebih fleksibel dan efisien.