Image for post
Image for post

Thành phần

  • Scheduler: bộ lập lịch thứ tự các URL download.
  • Downloader: thực hiện download dữ liệu. Quản lý các lỗi khi download. Chống trùng.
  • Spiders: bóc tách dữ liệu thành các items và requests
  • Item Pipeline: xử lý dữ liệu bóc tách được và lưu và db.
  • Scrapy Engine: quản lý các thành phần trên.

Luồng dữ liệu

Bước 1: Cung cấp URL xuất phát (start_url), được tạo thành một Request lưu trong Scheduler.

Bước 2–3: Scheduler lần lượt lấy các Requests gửi đến Downloader.

Bước 4–5: Downloader download dữ liệu từ internet, được Responses gửi đến Spiders.

Bước 6–7: Spiders thực hiện:

  • Bóc tách dữ liệu, thu được Item, gửi đến Item Pipeline.
  • Tách được URLs, tạo các Requests gửi đến Scheduler.

Bước 8: Item Pipeline thực hiện xử lý dữ liệu bóc tách được. Đơn giản nhất là thực hiện lưu dữ liệu vào database.

Bước 9: kiểm tra Scheduler còn Request?

  • Đúng: quay lại Bước 2.
  • Sai: kết thúc.

Bắt đầu crawl

tạo project:

scrapy startproject tutorial

Tạo spider:

scrapy crawl name_spider domain_name

Trong file mới tạo scrapy là name_spider.py sẽ có các tham số sau:

  • name: định danh spider và nó là duy nhất
  • start_urls: một danh sách urls cho spider bắt đầu thực hiện crawl. Các trang được download đầu tiên sẽ bắt đầu từ đây, còn lại sẽ được tạo từ dữ liệu đã được lấy về
  • parse(): một phương thức sẽ được gọi với một đối tượng Response đã được download của mỗi start urls. The response sẽ được truyền tới phương thức như là tham số đầu tiên và duy nhất của phương thức. Phương thức này có trách nhiệm phân tích response data và trích xuất scraped data (như là scraped items ) và nhiều url để follow (như là Request object)

Extracting Items

  • Sử dụng cơ chế dựa trên Xpath hoặc biểu thức CSS gọi là Scrapy Selector. (nghe nói Xpath mạnh mẽ hơn 😀)
  • Selector có 4 phương thức cơ bản:
  1. xpath(): trả về danh sách các selectors, mỗi cái đại diện cho một node đã được chọn bằng tham số biểu thức xpath truyền vào.
  2. css(): trả về danh sách các selectors, mỗi cái đại diện cho một node đã được chọn bằng tham số biểu thức css truyền vào.
  3. extract(): trả về một list unicode string với dữ liệu được chọn -> có thể dùng extract_first() để lấy 1 phần tử đầu tiên
  4. re(): trả về danh sách unicode string đã được trích xuất bằng tham số biểu thức chính quy truyền vào.

Okay, đ lưu trữ data dạng file json có thể chạy lệnh:

scrapy crawl dmoz -o items.json

Okay, để triển khai trên server thì dùng thằng này:

Đang cập nhật ví dụ.

Written by

Be Curious!| ☕️+✍🏼=❤️ | buihuycuong.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store