Tổng quan kiến trúc của Scrapy

420

Scrapy là một Python Framework mã nguồn mở https://github.com/scrapy/scrapy hỗ trợ cho việc Crawling và Scraping dữ liệu từ các trang Web bằng việc download HTML và extract data từ chúng.

Scrapy Architecture

Quá trình từ lúc bắt đầu request cho đến lúc extract thông tin thành công ,luồng dữ liệu được thực thi qua các engine.

Scrapy Components

1.Scrapy Engine

Engine chịu trách nhiệm điều khiển luồng giữa các Component trong hệ thống và triggering events when certain actions occur.

2.Scheduler

Có nhiệm vụ nhận request từ engine và đưa nó vào một queue để sắp xếp các URL theo một thứ tự Download.

3.Downloader

Có nhiệm vụ tải Source HTML của trang web và gửi nó về cho Engine.

4.Spider

Là một class được viết bởi Developer ,có nhiệm vụ phân tích response và extract các item,khởi tạo lại cái URL mới và nạp lại cho Scheduler qua Engine.

5.Item Pipeline

Có nhiệm vụ xử lí các Item sau khi được extract bằng spider ,sau đó lưu vào cơ sở dũ liệu.

6.Downloader middlewares

Là móc nối giữa Engine và Downloader ,chúng xử lí các request được đẩy từ engine và các response tạo ra từ Downloader.

7.Spider middlewares

Là móc nối giữa Engine và Spider ,chúng có nhiệm vụ xử lí input(response) của Spider và đầu ra ( items và request).

Quy trình thực thi của hệ thống

  1. Engine khởi tạo Request để bắt đầu crawl từ Spider .
  2. Engine lên lịch trình cho Request từ Spider và yêu cầu cho Request tiếp theo để crawl .
  3. Scheduler gửi request tiếp theo đến Engine.
  4. Engine gửi Request đến Downloader ,đi qua Downloader Middleware.
  5. Sau khi tải source HTML hoàn tất,Downloader khởi tạo một Object Response trả về qua Engine ,quá trình này đi qua Downloader MiddleWare.
  6. Engine nhận Respoonse từ Downloader,và gửi về Spider để xử lí ,quá trình này đi qua Spider Middleware.
  7. Spider xử lí Response và trả về các Item đã được scrape,sau đó khởi tạo Request đến Engine,thông qua Spider Middleware.
  8. Engine gửi các Item đã được xử lí đến Item pipelines,sau đó gửi các Request đã được xử lí đến Scheduler và yêu cầu (nếu có ) Request tiếp theo để crawl.
  9. Tiến trình lặp lại như bước 1,cho đến khi không còn Request nào từ Scheduler.

Kết luận

Trên đây mình đã giới thiệu về cấu trúc bên dưới của Scrapy,cách các Component phối hợp hoạt động. Cảm ơn mọi người đã quan tâm.!

Nguồn tham khảo : https://docs.scrapy.org/en/latest/topics/architecture.html

TopDev via Viblo

SHARE