Scrapy là gì? Khung làm việc Crawling Python đã được giải thích

Scrapy là gì?

API Scraping Universal không có scrapeless có thể phục vụ như một nguồn tiếp nhận cho các quy trình làm việc Scrapy cần nội dung được lấy hoặc render trước khi trích xuất.

Tóm tắt

  • Scrapy là một khung Python để crawling và trích xuất có cấu trúc. Nó phối hợp các yêu cầu, lên lịch, tải về, phân tích callback, xử lý mục, và xuất khẩu bên trong một môi trường chạy có thể mở rộng.
  • Một spider mô tả hành vi phụ thuộc vào nguồn gốc. Spider sinh ra các yêu cầu ban đầu, phân tích các phản hồi, phát ra các mục, và theo dõi các liên kết tiếp tục được phép.
  • Cơ chế kết nối mọi thành phần. Các yêu cầu và phản hồi đi qua scheduler, downloader, middleware, spider, và biên giới pipeline thay vì thông qua một tập lệnh đơn lẻ.
  • Selectors sử dụng CSS hoặc XPath. Các phản hồi Scrapy phơi bày các phương thức truy vấn trả về các đối tượng selector và giữ việc trích xuất trường gần với phản hồi đang được phân tích.
  • Scrapy không tự động render mọi trang. Nội dung động vẫn yêu cầu một đường dẫn tải về nhận thức trình duyệt, một điểm cuối có cấu trúc được phép, hoặc HTML đã được render trước.

Scrapy là một khung Crawling

Scrapy là một khung Python mã nguồn mở để lấy các trang, trích xuất các trường có cấu trúc, theo dõi các liên kết, xử lý các mục, và xuất khẩu kết quả. Nó lớn hơn một trình phân tích HTML và có tổ chức hơn một vòng lặp quanh một khách hàng HTTP. Khung này trở nên hữu ích khi một dự án có nhiều trang, quy tắc tiếp tục, chính sách yêu cầu chung, logic mục có thể tái sử dụng, hoặc các lần chạy theo lịch.

Tài liệu Scrapy chính thức mô tả các spider, selectors, yêu cầu và phản hồi, pipeline mục, xuất khẩu feed, middleware, phần mở rộng, lập lịch, và thực tiễn triển khai. Một dự án có thể chỉ sử dụng một tập hợp nhỏ lúc đầu và thêm các thành phần khi logic lặp lại xuất hiện.

Một dự án Scrapy tốt giữ kiến thức nguồn trong spider và chính sách có thể tái sử dụng ở nơi khác. Spider biết các trang nào để bắt đầu và cách để diễn giải chúng. Middleware downloader xử lý hành vi yêu cầu và phản hồi cắt ngang. Các pipeline mục làm sạch, xác thực, loại bỏ trùng lặp, hoặc lưu trữ đầu ra.

Dữ liệu Scrapy di chuyển qua hệ thống như thế nào

Engine thực thi của Scrapy phối hợp luồng. Tổng quan về kiến trúc cho thấy các yêu cầu di chuyển từ spider đến scheduler, qua middleware downloader đến downloader, và các phản hồi di chuyển trở lại qua middleware đến spider. Các mục sau đó chuyển đến các pipeline mục, trong khi các yêu cầu mới được khám phá trở lại scheduler.

Thành phầnTrách nhiệm chínhGiữ không liên quan đến nó
SpiderCác yêu cầu, phân tích, tiếp tụcChính sách lưu trữ chia sẻ và vận chuyển toàn cầu
SchedulerHàng đợi và đặt hàng yêu cầuTrích xuất trường
DownloaderTiếp nhận mạngChuẩn hóa kinh doanh
MiddlewareMóc yêu cầu hoặc phản hồi có thể tái sử dụngQuy tắc selector một lần
Pipeline mụcXác thực, dọn dẹp, tính bền vữngKhám phá liên kết
Xuất khẩu feedViết các định dạng đầu ra tiêu chuẩnLogic trang cụ thể nguồn

Các biên giới ngăn không cho mọi spider tái tạo lần nữa vận chuyển, loại bỏ trùng lặp, và đầu ra. Chúng cũng tạo điều kiện cho việc tìm kiếm các lỗi dễ dàng hơn. Một vấn đề tải về thuộc về trước callback của spider. Một tiêu đề bị thiếu thuộc về phân tích hoặc xác thực. Một lỗi cơ sở dữ liệu thuộc về sau khi mục đã được cấu trúc.

Spider Scrapy thực hiện công việc gì

Một spider là một lớp Python định nghĩa các yêu cầu nào để gửi và cách xử lý phản hồi của chúng. hướng dẫn nhện chính thức giải thích chu trình yêu cầu và phản hồi: yêu cầu bắt đầu được tải xuống, phản hồi được phân tích và phản hồi trả lại các mục hoặc yêu cầu khác.

Khối sau đây là điều kiện tiên quyết về thời gian địa phương vì Scrapy không được cài đặt trong không gian làm việc hiện tại. Cấu trúc của nó theo API Nhện đã được tài liệu hóa. Chạy nó trong một môi trường chuyên dụng và sử dụng một mục tiêu công khai mà các điều khoản cho phép thu thập.

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example_page"
    allowed_domains = ["example.com"]
    start_urls = ["https://example.com/"]

    def parse(self, response):
        title = response.css("h1::text").get()
        href = response.css("a::attr(href)").get()

        if not title or not href:
            raise ValueError("expected page identity is missing")

        yield {
            "title": title.strip(),
            "url": response.urljoin(href),
            "source_url": response.url,
        }

Nhện xác nhận trường danh tính của nó trước khi trả lại. response.urljoin giải quyết liên kết chống lại URL phản hồi thực tế. Trên một danh mục, phản hồi nên lặp qua các thùng chứa bản ghi và chạy các bộ chọn con liên quan đến mỗi thùng chứa.

Các bộ chọn, Mục và Quy trình có các công việc riêng biệt

Các bộ chọn đọc các trường từ một phản hồi. Các Mục hoặc từ điển đơn giản đại diện cho dữ liệu đã được trích xuất. Các Quy trình hoạt động sau khi trích xuất. Giữ các công việc đó riêng biệt cho phép một dự án kiểm tra các bộ chọn dựa trên phản hồi đã lưu và kiểm tra việc chuẩn hóa với các giá trị Python đơn giản.

Sử dụng CSS cho các truy vấn cấu trúc ngắn gọn và XPath khi một trường phụ thuộc vào tổ tiên, anh chị em hoặc mối quan hệ văn bản. Giữ các trường cần thiết rõ ràng. Một ID ổn định hoặc URL chuẩn bị thiếu nên từ chối mục; một phụ đề tùy chọn có thể оста null. Các quy trình không nên đoán các giá trị nguồn thiếu mà nhện chưa từng quan sát.

  • Các nhện sở hữu kiến thức cụ thể cho trang. URLs, bộ chọn và quy tắc tiếp tục thuộc gần với nguồn gốc.
  • Middleware sở hữu hành vi vận chuyển lặp lại. Áp dụng nó trên các nhện chỉ khi chính sách thực sự được chia sẻ.
  • Các quy trình sở hữu chính sách bản ghi. Xác thực, chuẩn hóa, loại bỏ trùng lặp và duy trì sau khi trích xuất.
  • Xuất bản bao gồm lưu trữ đơn giản. Sử dụng đầu ra JSON hoặc CSV tích hợp sẵn trước khi viết một lớp lưu giữ tùy chỉnh mà không có nhu cầu rõ ràng.

Biết Khi Nào Scrapy Có Kích Thước Đúng

Scrapy kiếm được cấu trúc của nó khi công việc có nhiều trang, nhiều nhện, chính sách được chia sẻ, quy trình, khả năng quan sát hoặc thực thi lặp lại. Việc trích xuất một trang có thể rõ ràng hơn dưới dạng Các yêu cầu cộng với một bộ phân tích. Bắt đầu nhỏ không phải là một thất bại; chuyển sang một khuôn khổ là hữu ích khi sự phối hợp trở thành vấn đề thống trị.

Scrapy cũng không phải là một trình duyệt theo mặc định. Nếu các giá trị cần thiết không có trong thân phản hồi và chỉ xuất hiện sau khi các kịch bản trang chạy, các bộ chọn không thể phục hồi chúng. Sử dụng một sự tích hợp tải xuống trả lại HTML đã được tạo, một nguồn có cấu trúc được ủy quyền hoặc một quy trình làm việc của trình duyệt khi tương tác là một phần của nhiệm vụ.

Kiểm soát Phạm vi Thu thập và Tiếp tục

allowed_domains là một sự phòng ngừa hữu ích, nhưng phạm vi dự án cũng nên xác định các sơ đồ cho phép, mẫu đường dẫn, hành vi truy vấn và ngân sách trang. Chuẩn hóa các URL trước khi loại bỏ trùng lặp để các tham số theo dõi và dạng thay thế không làm tăng gấp đôi hàng đợi.

Tiếp tục nên theo một liên kết tiếp theo đã được xác minh hoặc con trỏ. Một nhện có thể ngừng lại khi nguồn loại bỏ tín hiệu đó. Những mục trống một mình không phải là bằng chứng của sự hoàn tất vì một trang sai, bộ chọn thay đổi hoặc shell được render bởi khách hàng cũng có thể không trả về gì cả.

Xuất khẩu và Quan sát quá trình Thu thập

Xuất khẩu là cách đơn giản nhất để viết đầu ra mục ở các định dạng tiêu chuẩn. Một quy trình là phù hợp khi các bản ghi cần xác thực, loại bỏ trùng lặp, ghi vào cơ sở dữ liệu hoặc chuyển đổi theo nguồn cụ thể. Giữ lý do từ chối mục và chẩn đoán mạng riêng biệt với các bản ghi kinh doanh.

Theo dõi yêu cầu, lớp phản hồi, lỗi danh tính trang, thiếu bộ chọn, các mục được trả lại, các mục bị từ chối và độ sâu hàng đợi. Các đặc tả ngữ nghĩa HTTP làm rõ trạng thái phản hồi, nhưng kiểm tra danh tính trang vẫn cần thiết vì một phản hồi thành công vẫn có thể là một tài liệu không liên quan.

Thêm Middleware và Mở rộng Chỉ cho Chính sách Chia sẻ

Middleware tải xuống là phù hợp khi nhiều nhện cần cùng một hành vi yêu cầu hoặc phản hồi. Middleware nhện thuộc về đầu vào và đầu ra của nhện. Các mở rộng quan sát tín hiệu của khung và thực hiện hành vi giữa các dự án như số liệu hoặc giới hạn hoạt động. Một sự sửa chữa bộ chọn một lần không thuộc về bất kỳ lớp toàn cầu nào trong số này.

Bắt đầu với thành phần nhỏ nhất sở hữu quy tắc. Nếu một nhện cần một tiêu đề hoặc một nhánh phân tích, giữ nó ở đó cho đến khi hành vi lặp lại và có cùng nghĩa ở nơi khác. Các cái móc toàn cầu quá sớm làm cho dự án khó lý luận hơn vì một yêu cầu có thể thay đổi xa khỏi nhện đã tạo ra nó.

Tài liệu đặt hàng khi nhiều lớp middleware được kích hoạt. Mỗi móc nên có một trách nhiệm và trả về loại khung mà giai đoạn tiếp theo mong đợi. Các bài kiểm tra nên khẳng định yêu cầu hoặc phản hồi tại ranh giới thành phần, không chỉ là hàng cuối cùng được xuất khẩu.

Bảo tồn Nguồn Gốc Thông Qua Xử Lý Mục

Một mục nên mang URL nguồn chuẩn hóa của nó và một định danh nguồn ổn định trước khi nó vào quy trình. Quy trình có thể thêm thời gian thu mua, phiên bản bộ phân tích và danh tính lô, sau đó thực thi tính duy nhất hoặc chính sách lưu trữ. Những trường đó cho phép người dùng phía dưới phân biệt sự thay đổi nguồn thực từ việc triển khai nhện.

Giữ các giá trị thô khi chuẩn hóa có thể mất ý nghĩa. Tiền tệ, số lượng địa phương, ngày tháng con người và nhãn khả dụng cần chuyển đổi nhận thức nguồn. Lưu giá trị đã chuẩn hóa bên cạnh đủ ngữ cảnh ban đầu để kiểm tra quyết định, và từ chối các kết hợp vi phạm lược đồ được khai báo.

Kết luận

Scrapy là một khuôn khổ để phối hợp một trình thu thập, không chỉ đơn thuần là một bộ phân tích. Động cơ của nó, bộ lập lịch, trình tải xuống, middleware, nhện, quy trình và xuất khẩu mang đến cho mỗi mối quan tâm một ngôi nhà rõ ràng. Sử dụng cấu trúc đó khi hàng đợi và khả năng lặp lại quan trọng, giữ các bộ chọn cụ thể cho trang trong các nhện, xác thực danh tính trước khi trả lại các mục, và chỉ thêm thu mua đã được tạo ra nơi nguồn yêu cầu điều đó.

Sẵn sàng kết nối Scrapy với nội dung đã được tạo ra?

Giữ lại bộ lập lịch, nhện và đường ống của Scrapy trong khi Scrapeless xử lý việc thu thập cho các trang cần một tài liệu đã được hiển thị.

Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phíkhông cần thẻ tín dụng.

Nhận Tín Dụng $5 của Bạn →

Câu hỏi thường gặp

Scrapy được sử dụng để làm gì?

Scrapy được sử dụng để thu thập các trang web được phép, trích xuất các bản ghi có cấu trúc, theo các liên kết tiếp theo, xử lý các mục và xuất hoặc lưu trữ kết quả trong một dự án có thể lặp lại.

Scrapy có giống BeautifulSoup không?

Không. BeautifulSoup chủ yếu là một bộ phân tích cú pháp, trong khi Scrapy là một khung thu thập với các yêu cầu, lập lịch, tải xuống, gọi lại, trung gian, đường ống và xuất khẩu.

Scrapy có thể thu thập thông tin từ các trang web JavaScript không?

Các bộ chọn của Scrapy có thể phân tích HTML đã được hiển thị, nhưng đường dẫn HTTP mặc định không thực thi JavaScript của trang. Thêm một lớp thu thập tương thích hoặc sử dụng một nguồn có cấu trúc đã được ủy quyền.

Scrapy có hỗ trợ bộ chọn CSS và XPath không?

Có. Các phản hồi của Scrapy cung cấp các phương pháp bộ chọn cho cả CSS và XPath, và hai kiểu này có thể được sử dụng nơi mỗi kiểu thể hiện rõ ràng trường.

Khi nào Scrapy quá nhiều?

Scrapy có thể lớn hơn mức cần thiết cho một hoặc hai trang tĩnh không có hàng đợi, đường ống hoặc lịch trình lặp lại. Một khách hàng HTTP nhỏ cộng với bộ phân tích có thể rõ ràng hơn cho phạm vi đó.

Tài liệu tham khảo