0
Blog

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

05/06/2020

Tổng Quan

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

The data flow in Scrapy

The data flow in Scrapy

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. Nếu các bạn quan tâm các khoá học lập trình của Nordic Coder hoặc cụ thể hơn là khoá học Data Analysis với Python thì các bạn có thể liên hệ ngay để nhận thông tin khoá học và giáo trình học tập.

Nguồn: https://docs.scrapy.org/en/latest/topics/architecture.html

Trích từ Viblo