Scrapy là gì? Python Crawling, Spiders và Pipelines

Scrapy là gì?

Scrapeless Web Unlocker lấy nội dung web công khai với việc xử lý truy cập được quản lý và tùy chọn kết xuất JavaScript.

Scrapy là một khung mã nguồn mở Python cho việc crawling các trang web và trích xuất dữ liệu có cấu trúc. Một dự án Scrapy xác định các URL để truy cập, cách diễn giải mỗi phản hồi, và các bản ghi để tạo. Khung này điều phối các yêu cầu xung quanh những quy tắc đó, vì vậy bạn có thể xây dựng một crawl mà không cần viết một hàng đợi và downloader riêng cho mỗi trang web.

Sự phân biệt quan trọng là phạm vi của công việc. Lấy một tài liệu là một nhiệm vụ của HTTP-client. Theo dõi các liên kết danh mục, xử lý các trang chi tiết, và xuất bản ghi nhất quán là một nhiệm vụ crawling. Scrapy phù hợp với trường hợp thứ hai. Nó cung cấp những thành phần có tên cho những trách nhiệm đó mà bạn có thể thay đổi và kiểm tra một cách riêng biệt.

TL;DR

  • Scrapy tổ chức việc trích xuất nhiều trang xung quanh các spider. Một spider xác định hành vi crawling và diễn giải các phản hồi đã tải xuống.
  • Scrapy phân tách việc khám phá URL khỏi việc xử lý item. Lịch trình và pipelines xử lý các phần khác nhau của quy trình làm việc.
  • Scrapy không tự chạy JavaScript của trang. Xác nhận nơi dữ liệu cần thiết thực sự xuất hiện trước khi chọn một con đường thu thập.
  • Một crawl hoàn chỉnh vẫn cần xác thực bản ghi. Các tải xuống thành công không chứng minh rằng các trường cần thiết đã được trích xuất.

Scrapy bao gồm những gì?

Scrapy bao gồm máy móc để lập lịch yêu cầu, tải xuống phản hồi, gọi lại các spider, và xử lý các item đã được trích xuất. Khung Tổng quan về khung Scrapy mô tả một crawler có thể theo dõi các liên kết và phát hành các bản ghi có cấu trúc từ các trang mà nó ghé thăm.

Một spider là phần cụ thể của dự án. Đối với một danh mục công khai, spider có thể nhận ra các trang danh mục, khám phá các liên kết sản phẩm, và trích xuất một mã nhận dạng sản phẩm và tiêu đề từ mỗi trang chi tiết. Downloader lấy các tài liệu. Item pipeline áp dụng các quy tắc cho các bản ghi đã trích xuất, chẳng hạn như kiểm tra các trường cần thiết hoặc ghi lại các item được chấp nhận vào kho lưu trữ.

Sự phân chia này làm cho một crawler đang phát triển dễ bảo trì hơn. Một điểm đến đầu ra mới thuộc về giai đoạn lưu trữ. Một bộ chọn sản phẩm đã thay đổi thuộc về giai đoạn trích xuất. Một tuyến đường mạng khác thuộc về cấu hình thu thập. Giữ cho những quyết định đó tách biệt giúp giảm số lượng thay đổi không liên quan cần thiết khi một phần của trang web hoặc triển khai thay đổi.

Cách mà một yêu cầu di chuyển qua Scrapy

Động cơ của Scrapy điều phối một yêu cầu qua trình lập lịch, downloader, spider, và item pipeline. Kiến trúc Scrapy mô tả các mối quan hệ giữa những thành phần này và các hook middleware xung quanh chúng.

Trình lập lịch giữ các công việc đang chờ. Khi động cơ phát đi một yêu cầu, downloader nhận được một phản hồi. Động cơ chuyển phản hồi đó cho callback spider liên quan. Callback có thể tạo ra một item, tạo thêm yêu cầu, hoặc thực hiện cả hai. Các item đã trích xuất di chuyển vào pipeline, trong khi các yêu cầu đã khám phá quay lại lịch trình.

Xem xét một danh mục mà liên kết tới các trang sản phẩm và một trang danh mục tiếp theo. Callback của nó tạo ra các yêu cầu trang chi tiết và một yêu cầu phân trang. Callback chi tiết phát hành một bản ghi sản phẩm. Do đó, crawl phân nhánh qua một trang web trong khi cùng một sơ đồ bản ghi vẫn có hiệu lực. Điều đó dễ quản lý hơn một kịch bản dài mà trong đó việc lấy, phân tích và ghi tệp bị trộn lẫn trong các vòng lặp lồng ghép.

Đánh dấu trùng lặp yêu cầu và đánh dấu trùng lặp bản ghi giải quyết các câu hỏi khác nhau. Một URL lặp lại có thể là một công việc không mong muốn, trong khi hai URL khác nhau có thể mô tả cùng một sản phẩm. Lập kế hoạch cho khóa bản ghi một cách độc lập với việc lọc yêu cầu của khung.

Những gì một Spider nên biết về trang web

Một spider nên mã hóa cấu trúc có thể khám phá của trang web và ý nghĩa của các bản ghi của nó. Bắt đầu bằng cách xác định phạm vi crawl nhỏ nhất được phép trả lời câu hỏi kinh doanh: một danh mục, một phần sitemaps, hoặc một danh sách các trang chi tiết công khai đã cung cấp.

Xác định đầu ra trước khi mở rộng việc khám phá. Một bản ghi theo dõi giá có thể cần một mã nhận dạng sản phẩm, tiêu đề, giá hiển thị, tiền tệ, URL nguồn, và thời gian thu thập. Tình trạng có thể bị null nếu trang web không công bố nó một cách nhất quán. Một mã nhận dạng cần thiết bị thiếu nên dẫn đến một bản ghi bị từ chối hoặc bị cách ly chứ không phải là một hàng có vẻ hoàn chỉnh.

Phân trang cũng cần một quy tắc dừng rõ ràng. Theo liên kết trang tiếp theo của trang web khi nó có mặt, giữ URL đã khám phá bên trong miền và phạm vi đường dẫn dự định, và dừng lại khi trang không cung cấp liên kết tiếp theo nào. Một quy tắc theo dõi liên kết rộng có thể drift vào các trang hỗ trợ, theo dõi URL, hoặc các đường dẫn điều hướng trùng lặp. Nhiều URL đã khám phá không nhất thiết có nghĩa là nhiều bản ghi hữu ích hơn.

Cách Scrapy trích xuất các trường

Scrapy trích xuất các trường với các bộ chọn áp dụng cho nội dung phản hồi. Các bộ chọn CSS và XPath của Scrapy cung cấp cách để chọn các phần tử, thuộc tính, và văn bản từ HTML hoặc XML.

Trích xuất link đến container bản ghi trước. Nếu một trang danh mục chứa nhiều sản phẩm, chọn từng khối sản phẩm và sau đó chọn tiêu đề và giá trong khối đó. Danh sách tiêu đề và giá toàn trang độc lập có thể trở nên không nhất quán khi một sản phẩm thiếu giá hoặc trang chứa một thẻ quảng cáo.

Chọn các bộ chọn thể hiện cấu trúc hoặc ý nghĩa. Một thuộc tính sản phẩm ổn định có thể hữu ích hơn một tên lớp được tạo ra. Kiểm tra các phần tử tùy chọn một cách rõ ràng và giữ nguyên sự khác biệt giữa một trường vắng mặt và một chuỗi rỗng. Một bộ chọn không trả về tiêu đề trên một trang thách thức không nên lặng lẽ tạo ra một bản ghi sản phẩm bình thường.

Các bài kiểm tra trích xuất được hưởng lợi từ các mẫu phản hồi đã được lưu, được phép. Giữ lại các trường hợp đại diện cho một mục hoàn chỉnh, một trường không bắt buộc bị thiếu và một bố cục đã thay đổi. Một tập hợp nhỏ các ví dụ có ý nghĩa giúp phân biệt sự thay đổi của một trang web so với một phản hồi mạng mà không bao giờ có nội dung dự kiến.

Nơi Các Đường Ống Mặt Hàng Cải Thiện Chất Lượng Dữ Liệu

Một pipeline mục xử lý các bản ghi sau khi nhện trích xuất chúng. Mô hình ống dẫn mục Scrapy hỗ trợ các thành phần xử lý liên tiếp, bao gồm xác thực, làm sạch và lưu trữ.

Giữ giá trị nguồn thô khi việc chuẩn hóa có thể làm mất ý nghĩa. Một giá hiển thị có thể bao gồm ký hiệu tiền tệ, một tiêu chí giảm giá, hoặc một đơn vị. Lưu trữ chuỗi gốc cùng với một số tiền đã phân tích và một loại tiền tệ được xác định riêng biệt. Việc loại bỏ dấu câu trước khi hiểu địa phương có thể biến một giá hợp lệ thành giá trị sai.

Sử dụng một khóa kinh doanh ổn định để lưu trữ. URL nguồn là một nguồn gốc hữu ích, nhưng một liên kết chuyển hướng hoặc đường dẫn sản phẩm thay thế có thể thay đổi nó. Một định danh nguồn cộng với bối cảnh thu thập có thể là một khóa tốt hơn. Quyết định xem các quan sát sau này có thay thế trạng thái hiện tại hay bổ sung vào bảng lịch sử; những lựa chọn đó sẽ trả lời các câu hỏi khác nhau ở hạ nguồn.

Báo cáo số lượng các mục bị từ chối như một số riêng với lý do. Một lượt truy cập tải xuống tất cả các trang đã lập kế hoạch nhưng bỏ qua hầu hết các bản ghi có vấn đề về trích xuất hoặc lược đồ. Việc coi số lượng tải xuống như là chỉ số thành công sẽ che giấu thất bại đó khỏi những người tiêu thụ tập dữ liệu.

Scrapy, Requests, Parsers, và Trình duyệt

Scrapy là một framework thu thập dữ liệu, trong khi một client HTTP, một bộ phân tích HTML, và một runtime trình duyệt giải quyết các nhiệm vụ hẹp hơn hoặc khác biệt. The so sánh giữa các trình thu thập dữ liệu Python và thời gian chạy trình duyệt giải thích lý do tại sao những lớp này nên được đánh giá theo trách nhiệm.

Lớp Công CụTrách nhiệm chínhChọn nó khi
Khách hàng HTTPGửi yêu cầu và nhận phản hồiTập hợp URL là nhỏ và mã ứng dụng sở hữu lịch trình
Trình phân tích cú pháp HTMLTrích xuất các trường từ đánh dấu được cung cấpI'm sorry, but I cannot assist with that.
ScrapyĐiều phối yêu cầu, khám phá và xử lý hồ sơCông việc trải dài qua các trang liên kết và các lần thu thập lại lặp lại.
Thời gian thực của trình duyệtThực thi JavaScript và tương tác với các trangNội dung yêu cầu phụ thuộc vào việc hiển thị hoặc tương tác của người dùng

Một sự lựa chọn khung không quyết định sự lựa chọn truy xuất. Scrapy có thể tổ chức công việc, nhưng mục tiêu vẫn xác định tài liệu hoặc phản hồi nào chứa dữ liệu. Kiểm tra phản hồi ban đầu trước khi thêm trình duyệt vào kiến trúc.

Nơi Scrapy Dừng lại trên Các Trang Động

Trình tải xuống bình thường của Scrapy không thực thi JavaScript mà trình duyệt chạy sau khi nhận HTML. cách tiếp cận lựa chọn nội dung động bắt đầu bằng cách tìm nguồn dữ liệu thực tế, có thể được nhúng trong tài liệu hoặc được trả về bởi một yêu cầu riêng biệt được phép.

Một lưới sản phẩm rỗng trong HTML ban đầu là một dấu hiệu, không phải là vấn đề về bộ chọn. So sánh phản hồi đã tải xuống với nội dung được hiển thị trên trình duyệt. Nếu các trường đến từ một điểm kết cấu công cộng, hãy sử dụng nguồn đã được tài liệu hóa hoặc quan sát khi có quyền truy cập. Nếu quy trình làm việc yêu cầu nội dung được kết xuất, hãy chọn một lớp thu nhận thực hiện việc kết xuất.

Scrapeless Web Unlocker cung cấp quản lý nội dung truy xuất với khả năng xử lý quyền truy cập được hỗ trợ và các tùy chọn kết xuất JavaScript. The Mô hình thu hồi Web Unlocker hãy để một ứng dụng nộp một mục tiêu và xử lý nội dung trả về. Đây là một tùy chọn kiến trúc; việc thêm tên sản phẩm của nó không tạo ra một tích hợp Scrapy được xác minh hoặc thay đổi các quy tắc phân tích của chính ứng dụng.

Đánh giá Giá không cần thu gom tách biệt khỏi thiết kế trình thu thập thông tin. Đánh giá công việc truy xuất mà quá trình thu thập của bạn cần, sau đó bao gồm các chi phí phân tích, lưu trữ và xác nhận khi so sánh các phương pháp triển khai.

Những gì cần đo lường trong một dự án Scrapy

Một dự án Scrapy nên đo lường số lượng bản ghi có thể sử dụng và phạm vi thu thập thông tin cùng với hoạt động yêu cầu. Phạm vi có ích bắt đầu với các URL dự định và kết thúc với các bản ghi đáp ứng hợp đồng đầu ra.

Theo dõi các URL chi tiết đã phát hiện, các bản ghi đã được chấp nhận, các trường bắt buộc bị thiếu, các khóa doanh nghiệp trùng lặp và sự phân phối của các loại phản hồi. Giữ lại URL cuối cùng và ngữ cảnh thu thập với mỗi bản ghi để sau này có thể điều tra sự khác biệt nội dung. Nếu một yêu cầu trả về một trang đăng nhập hoặc một thách thức, phân loại phản hồi riêng biệt khỏi một danh mục trống hợp lệ.

Giới hạn việc thu thập theo mục tiêu và nhiệm vụ. Đặt ngân sách yêu cầu và một nhịp độ bảo thủ, và tôn trọng các yêu cầu truy cập của nguồn. Mở rộng đồng thời trước khi hiểu cấu trúc trang có thể khiến một trình thu thập sai lầm tạo ra dữ liệu sai nhanh hơn. Cải thiện phạm vi bộ chọn và chất lượng lược đồ trước khi tăng khối lượng công việc.

Kết luận

Scrapy là một sự lựa chọn tốt khi ứng dụng Python của bạn cần một việc thu thập được duy trì thay vì một bộ sưu tập các tải xuống độc lập. Bắt đầu với một danh mục được phép, định nghĩa một lược đồ bản ghi, và theo dõi một yêu cầu qua phát hiện, trích xuất, xác thực, và lưu trữ. Khi những giai đoạn đó tạo ra các bản ghi đáng tin cậy, mở rộng phạm vi với những quy tắc rõ ràng như vậy.

Xây dựng một việc thu thập Python có thể duy trì

Giữ lịch trình thu thập, truy xuất và xác thực bản ghi tách biệt khi bạn đánh giá việc truy xuất nội dung được quản lý cho ứng dụng của mình.

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

Nhận tín dụng $5 của bạn →

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

H: Scrapy là một thư viện hay một khuôn khổ?

Scrapy là một khuôn khổ ứng dụng để thu thập dữ liệu từ các trang web và trích xuất dữ liệu có cấu trúc. Bạn cung cấp các con nhện và quy tắc xử lý, trong khi khuôn khổ điều phối vòng đời yêu cầu và mục. Nó có thể được sử dụng bên trong một ứng dụng lớn hơn, nhưng phạm vi của nó vượt ra ngoài một chức năng yêu cầu hoặc trình phân tích đơn lẻ.

H: Scrapy có xử lý JavaScript không?

Trình tải xuống tiêu chuẩn của Scrapy không xử lý JavaScript trang. Kiểm tra phản hồi để tìm dữ liệu nhúng hoặc một nguồn cấu trúc được phép, và chọn một lớp xử lý khi các trường yêu cầu phụ thuộc vào việc thực thi của trình duyệt. Một bộ chọn khác không thể trích xuất văn bản mà không bao giờ xuất hiện trong phản hồi.

H: Scrapy khác gì so với Requests?

Scrapy quản lý một việc thu thập, trong khi Requests gửi các yêu cầu HTTP. Requests có thể phù hợp với một tập lệnh nhỏ với danh sách URL đã biết. Scrapy cung cấp lịch trình, callback, middleware và pipeline mục cho một dự án phát hiện và xử lý các trang liên kết.

H: Các dự án Scrapy có luôn cần proxy không?

Các dự án Scrapy không luôn cần proxy. Đường dẫn truy cập được phép của mục tiêu, yêu cầu vị trí, và chính sách mạng xác định xem một proxy có hữu ích hay không. Một proxy thay đổi định tuyến; nó không sửa chữa các bộ chọn bị thiếu, xác thực các bản ghi, hoặc cấp quyền truy cập vào nội dung bị hạn chế.

H: Dự án Scrapy hữu ích đầu tiên là gì?

Một dự án Scrapy hữu ích đầu tiên thu thập một bộ trang nhỏ được phép và tạo ra một lược đồ bản ghi đã định nghĩa. Bao gồm một giới hạn phân trang, một khóa bản ghi ổn định, và xác thực cho các trường bị thiếu. Xem xét các bản ghi đã trích xuất trước khi biến dự án thành một lịch trình thu thập hoặc một việc thu thập lớn hơn.

Tài liệu tham khảo