Phân trang là gì? Các trang, Offset, Cursor và Cuộn

Phân trang là gì? Các trang, Offset, Cursor và Cuộn

Scrapeless Agent Browser tự động hóa điều hướng trang và tương tác trình duyệt để thu thập dữ liệu từ các giao diện công khai có phân trang.

Tóm tắt

  • Phân trang trả về một tập hợp dưới dạng các phần giới hạn. Hợp đồng điều hướng xác định cách một client phát hiện phần tiếp theo.
  • Các điều khiển hiển thị không cho biết thuật toán backend. Một giao diện “tải thêm” có thể dùng offset, cursor hoặc một cơ chế tiếp tục khác.
  • Việc sắp xếp và lọc xác định tập hợp đang được duyệt. Thay đổi chúng giữa chừng có thể làm mất ý nghĩa của một vị trí đã lưu.
  • Một lần thu thập đầy đủ cần có điều kiện kết thúc đã được kiểm chứng. Đếm số bản ghi chấp nhận được và báo cáo ranh giới nguồn thực tế đã quan sát.

Phân trang chia một tập hợp thành các phần có thể truy xuất

Phân trang là quá trình chia một tập hợp thành các phần nhỏ hơn mà client truy xuất hoặc hiển thị riêng biệt. Một giao diện tìm kiếm có thể hiển thị các trang kết quả được đánh số, một feed có thể thêm nhiều mục khi cuộn, và một API có thể trả về một continuation token. Mỗi thiết kế giới hạn lượng thông tin được xử lý tại một thời điểm đồng thời cung cấp cho người dùng cách để lấy thêm.

Lý do phân trang rộng hơn thiết kế trang hiển thị. Một tập hợp lớn có thể tốn nhiều thời gian để truy vấn, tuần tự hóa, truyền, phân tích và render. Trả về một phần có giới hạn giúp quản lý các chi phí đó. Nó cũng tạo ra một hợp đồng mà client phải hiểu: những mục nào thuộc về tập hợp, chúng được sắp xếp thế nào, phần tiếp theo được yêu cầu ra sao và điều gì cho thấy việc duyệt đã kết thúc.

Phân trang không có nghĩa là mọi trang có cùng độ dài, luôn có tổng số lượng, hoặc tập hợp giữ nguyên trong suốt quá trình duyệt. Những thuộc tính đó phụ thuộc vào dịch vụ. Trước khi thu thập bản ghi, hãy đọc hành vi endpoint hoặc giao diện và xác định ranh giới tập dữ liệu. Nếu không, một chương trình có thể điều hướng đúng nhưng lại đưa ra các khẳng định không được hỗ trợ về tính đầy đủ hoặc tính nhất quán lịch sử.

Các trang được đánh số và Offset thể hiện điều hướng theo vị trí

Phân trang theo số trang yêu cầu một trang được đặt tên theo một quy ước kích thước trang cụ thể. Phân trang theo offset yêu cầu server bỏ qua một số mục trước khi trả về một phần có giới hạn. Hai cách này có thể liên hệ với nhau về mặt số học khi biết quy tắc đánh chỉ mục và kích thước trang, nhưng client không nên suy đoán các quy tắc đó. Một số giao diện bắt đầu đánh số trang từ 0 và số khác từ 1.

Giao diện theo vị trí hữu ích khi con người muốn một vị trí quen thuộc trong một tập hợp ổn định hoặc nhảy trực tiếp đến một trang. Nó trở nên khó diễn giải hơn khi các mục được thêm hoặc xóa giữa các lần yêu cầu. Một bản ghi mới gần đầu danh sách có thể làm dịch chuyển các offset phía sau, vì vậy người dùng có thể gặp một mục hai lần hoặc bỏ lỡ một mục ngay cả khi yêu cầu các vị trí liên tiếp một cách chính xác.

Hành vi PostgreSQL LIMIT and OFFSET giải thích vì sao cần một thứ tự có thể dự đoán và vì sao một offset lớn vẫn có thể buộc server phải tính toán các hàng bị bỏ qua. Đó là một chi tiết triển khai cụ thể của cơ sở dữ liệu chứ không phải bằng chứng rằng mọi API dùng offset đều chậm. Hãy đánh giá backend và khối lượng công việc thực tế thay vì xếp hạng các kiểu giao diện chỉ từ tên gọi của chúng.

Cursor thể hiện ranh giới tiếp tục

Phân trang bằng cursor trả về một giá trị xác định nơi client nên tiếp tục trong một truy vấn có sắp xếp. Người dùng thường gửi lại giá trị đó mà không diễn giải nó. Một cursor mờ (opaque) giữ cho hợp đồng API độc lập với chi tiết lưu trữ, trong khi một liên kết next cũng có thể giữ đúng endpoint và các tham số truy vấn. Hãy dùng cơ chế tiếp tục mà dịch vụ cung cấp rõ ràng.

Hướng dẫn phân trang AIP-158 minh họa một hợp đồng page-token trong đó các tham số yêu cầu vẫn nhất quán giữa các lần tiếp tục. Nó cũng nêu rõ rằng một trang có thể chứa ít mục hơn so với yêu cầu nhưng vẫn bao gồm một page token khác. Đây là lý do tại sao chỉ dựa vào độ dài trang là một quy tắc kết thúc không an toàn. Trường tiếp tục được tài liệu hóa có tính thẩm quyền hơn một giả định về việc trang phải “đầy” trông như thế nào.

Cursor thường phù hợp với các feed tuần tự và các lần duyệt có sắp xếp lớn, nhưng bản thân chúng không tạo ra một snapshot cố định. Token có thể hết hạn, quyền truy cập có thể thay đổi và các trường sắp xếp có thể thay đổi vị trí bản ghi. Một bản xuất lịch sử cần một hợp đồng nguồn hỗ trợ mức độ nhất quán và lưu trữ cần thiết, chứ không chỉ là một endpoint phơi bày một trường tên là cursor.

Cách tiếp cậnCơ chế tiếp tụcCâu hỏi cần xác minh
Trang được đánh sốChỉ mục trang theo một quy ước kích thước trangĐánh số bắt đầu từ đâu và có thể thay đổi không?
OffsetSố bản ghi cần bỏ quaThứ tự sắp xếp có ổn định và có hỗ trợ truy cập sâu không?
CursorToken vị trí do server cung cấp hoặc liên kết nextToken có hiệu lực bao lâu và khi nào việc duyệt hoàn tất?
Tải thêmMột tương tác bổ sung các bản ghi hiển thịYêu cầu dữ liệu và trạng thái kết thúc mà điều khiển này biểu diễn là gì?
Cuộn vô hạnMột tương tác tải dữ liệu được kích hoạt bởi vùng hiển thị (viewport)Quan sát nào chứng minh rằng bản ghi mới đã đến?

Phân trang trên trình duyệt là một hợp đồng giao diện người dùng

Phân trang trên trình duyệt mô tả cách một người hoặc hệ thống tự động có được một nhóm bản ghi hiển thị khác. Nút next có thể điều hướng sang tài liệu mới, thay thế danh sách hiện tại hoặc bổ sung thêm mục. Một điều khiển load-more có thể biến mất khi đến cuối hoặc vẫn tồn tại ở trạng thái vô hiệu. Cuộn vô hạn có thể chỉ kích hoạt yêu cầu sau khi vùng hiển thị đạt đến một ngưỡng. Hãy quan sát các trạng thái đó trước khi chọn hành động tự động hóa.

Giao diện không tiết lộ một cách đáng tin cậy phương thức lưu trữ bên dưới. Một trang được đánh số có thể gọi một API, và một danh sách vô hạn có thể dùng offset thay vì cursor. Hãy giữ hành động hiển thị và tiếp tục trên mạng như hai quan sát riêng biệt. Một yêu cầu nội bộ không được tài liệu hóa không tự động trở thành một API công khai ổn định chỉ vì công cụ dành cho nhà phát triển có thể hiển thị nó.

Đếm danh tính bản ghi thay vì chỉ dựa vào số lượng phần tử DOM. Các giao diện được ảo hóa có thể tái sử dụng một tập nhỏ phần tử để hiển thị một tập hợp lớn hơn. Các bản sao được nối thêm có thể làm tăng số phần tử mà không thêm bản ghi mới. Logic thu thập cần nhận diện các trường định danh mà tác vụ yêu cầu và giữ được sự khác biệt giữa một thẻ đã được quan sát và một bản ghi mới được chấp nhận.

Thứ tự, Bộ lọc và Ranh giới Snapshot Xác định Phạm vi Bao phủ

Một phép duyệt phân trang chỉ có ý nghĩa rõ ràng khi truy vấn vẫn có thể nhận diện. Lưu tên tập hợp, bộ lọc, thứ tự sắp xếp và bất kỳ ranh giới thời gian được hỗ trợ nào cùng với kết quả. Nếu người dùng chuyển từ một danh mục sang danh mục khác giữa chừng công việc, vị trí trang đã lưu sẽ không còn mô tả cùng một tập hợp. Hãy bắt đầu một lượt duyệt riêng biệt hoặc tuân theo hành vi đã được dịch vụ ghi trong tài liệu cho sự thay đổi đó.

Hướng dẫn OpenStack pagination and sorting guidance xem việc lọc và sắp xếp là một phần của giao diện tập hợp. Một bên tiêu thụ nên giữ các quy tắc đó thay vì coi phân trang như một vòng lặp tách biệt. Để duyệt ổn định, một khóa đã sắp xếp cần một bộ phân xử ràng buộc khi nhiều bản ghi có thể có cùng giá trị sắp xếp hiển thị.

Một lần duyệt hoàn chỉnh qua một giao diện sống có thể vẫn bao trùm các trạng thái nguồn khác nhau. Bản ghi mới có thể xuất hiện trong quá trình thu thập và bản ghi bị xóa có thể biến mất. Hãy xác định xem báo cáo mô tả tất cả bản ghi trong một lần xuất cố định hay các bản ghi được quan sát trong một cửa sổ thu thập. Khi nguồn không cung cấp đảm bảo snapshot, hãy giữ nguyên giới hạn đó trong báo cáo thay vì chuyển việc điều hướng thành công thành một tuyên bố đầy đủ mạnh hơn.

Tìm Điểm Kết thúc từ Tín hiệu đã được Ghi trong Tài liệu

Một điều kiện kết thúc cho biết bộ thu thập khi nào không còn phần nào khác thuộc về lượt duyệt. Một API có thể bỏ qua token tiếp theo, trả về một cờ tiếp tục là false hoặc không cung cấp liên kết tiếp theo. Trình duyệt có thể vô hiệu hóa điều khiển điều hướng hoặc hiển thị thông báo kết thúc. Tín hiệu đúng phụ thuộc vào giao diện, và bên tiêu thụ nên ghi lại đã dùng tín hiệu nào.

định nghĩa các mối quan hệ liên kết mà API có thể dùng để biểu đạt tài nguyên liên quan, bao gồm điều hướng. Khi một dịch vụ trả về liên kết tiếp theo, hãy tuân theo ngữ nghĩa đã được ghi trong tài liệu thay vì tự dựng lại URL từ các tham số đoán được. Giữ nguyên ranh giới ủy quyền liên quan và tránh chuyển tiếp thông tin xác thực tới một host không mong đợi chỉ vì một liên kết xuất hiện trong phản hồi.

Giới hạn thời gian, giới hạn số trang hoặc màn hình không đổi không tự động là điều kiện kết thúc của nguồn. Đây có thể là các giới hạn công việc hợp lý, nhưng chúng tạo ra một bản thu thập một phần có giới hạn khi nguồn có thể chứa nhiều bản ghi hơn. Hãy gắn nhãn sự khác biệt một cách rõ ràng. Một kết quả hữu ích giải thích liệu nguồn đã kết thúc, ngân sách đã hết, cửa sổ quan sát đã kết thúc hay giao diện không cung cấp đủ bằng chứng để tiếp tục.

Lưu Bản ghi Trước khi Tiến Vị trí Checkpoint

Một checkpoint nên đại diện cho nội dung trang đã được lưu trữ bền vững. Thu thập định nghĩa truy vấn và trạng thái tiếp tục cùng nhau, commit các bản ghi đã chấp nhận, rồi mới tiến vị trí đã lưu. Đảo ngược thứ tự đó có thể làm bỏ sót dữ liệu nếu chương trình dừng lại giữa lúc cập nhật vị trí và lúc ghi bản ghi. Hãy biến ranh giới lưu trữ thành một phần của thiết kế lượt duyệt thay vì suy nghĩ sau cùng.

Khử trùng lặp bằng các định danh bản ghi ổn định khi nguồn cung cấp. Một URL, ID sản phẩm hoặc một khóa được ghi trong tài liệu khác có thể phù hợp, tùy thuộc vào tác vụ. Chỉ dùng văn bản tiêu đề hiển thị thường là một định danh yếu vì tiêu đề có thể lặp lại hoặc thay đổi. Hãy giữ định danh nguồn và thời gian quan sát để xử lý về sau có thể phân biệt các lần quan sát lặp lại với các bản ghi khác nhau tình cờ trông giống nhau.

Tránh chạy song song một chuỗi con trỏ phụ thuộc đơn lẻ bằng cách đoán token tương lai. Vị trí tiếp theo có thể phụ thuộc vào phản hồi liền trước. Các phân vùng độc lập có thể được xử lý riêng khi nguồn hỗ trợ chúng và phạm vi kết hợp vẫn được xác định rõ. Tính đến ngân sách yêu cầu chung trên các phân vùng đó, và ghi đủ siêu dữ liệu phân vùng để giải thích cách kết quả của chúng được kết hợp.

Áp dụng Các Khái niệm Phân trang cho Trình duyệt Được Quản lý

Scrapeless Agent Browser cung cấp môi trường trình duyệt cho việc điều hướng trang và tương tác. Phần Agent Browser overview thiết lập khả năng đó, trong khi tự động hóa của bạn định nghĩa các bộ chọn, bản ghi được chấp nhận và điều kiện dừng. Một trình duyệt được quản lý không quyết định trang nào tạo thành bộ dữ liệu của bạn hoặc thiết lập snapshot nguồn thay cho bạn.

Phần browser pagination patterns phân biệt các điều khiển tiếp theo, trang được đánh số, nút tải thêm và cuộn vô hạn. Hãy dùng các mẫu đó để nhận diện giao diện trước khi triển khai hành vi cụ thể của nó. Giữ bước kiểm tra tính hợp lệ bản ghi sau mỗi lần chuyển tiếp để một thông báo truy cập hoặc khung ứng dụng trống không thể âm thầm trở thành một trang cuối cùng có vẻ hợp lệ.

Xem lại Scrapeless pricing khi ước tính chi phí tài nguyên cho lần thu thập. Một giả định kiểm toán danh mục có thể bắt đầu với một tập giới hạn các trang được phép, ghi lại từng định danh sản phẩm đã chấp nhận và dừng tại trạng thái kết thúc rõ ràng của giao diện. Báo cáo thu được nên nêu rõ danh mục đã quan sát, thứ tự sắp xếp, cửa sổ thu thập và bằng chứng kết thúc để người khác có thể đánh giá phạm vi bao phủ của nó.

Chọn Điều hướng từ Yêu cầu Người dùng và Dữ liệu

Chọn một thiết kế phân trang dựa trên yêu cầu về điều hướng, tính nhất quán và chi phí của tác vụ. Con người có thể cần nhảy trang trực tiếp, trong khi các bản xuất tự động có thể cần duyệt tuần tự ổn định và khả năng tiếp tục bền vững. Một giao diện di động có thể ưu tiên tải thêm, nhưng sự tiện lợi của nó không tạo thành đảm bảo nhất quán ở backend. Hãy tách riêng lựa chọn hiển thị khỏi hợp đồng bản ghi.

Trước khi mở rộng một bộ thu thập, hãy kiểm tra bước chuyển đầu tiên, một bước chuyển ở giữa và trạng thái cuối cùng bằng cách dùng một bộ sưu tập được ủy quyền mang tính đại diện. Kiểm tra xem các bộ lọc có vẫn còn hiệu lực và danh tính bản ghi có vẫn ổn định không. Một lượt duyệt nhỏ với bằng chứng rõ ràng hữu ích hơn một tệp lớn mà phần kết không thể giải thích được. Tiêu chí chấp nhận nên làm cho bằng chứng đó hiển thị với những người sử dụng bộ dữ liệu.

Kết luận

Phân trang kết hợp một cơ chế điều hướng với một hợp đồng bộ sưu tập có thứ tự. Xác định hành động tiếp theo, bảo toàn trạng thái truy vấn, xác thực bản ghi sau mỗi lần chuyển, và ghi lại điểm kết thúc thực sự. Cách tiếp cận đó tạo ra một bộ dữ liệu mà phạm vi bao phủ có thể được đánh giá, dù nguồn dùng số trang, token mờ, hay giao diện trình duyệt động.

Xây Dựng Quy Trình Dữ Liệu Web Của Bạn

Sử dụng Agent Browser để điều hướng các giao diện phân trang với danh tính bản ghi rõ ràng, ranh giới truy vấn và bằng chứng hoàn tất.

Đăng ký 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 $5 Tín Dụng Của Bạn →

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

Cuộn vô hạn có phải là một dạng phân trang không?

Cuộn vô hạn là một mẫu giao diện người dùng để truy xuất và hiển thị thêm các phần của một bộ sưu tập. Hệ thống backend của nó có thể dùng con trỏ, offset, hoặc một phương thức tiếp tục khác. Hãy quan sát dữ liệu thực tế và hợp đồng trạng thái kết thúc thay vì suy đoán thuật toán backend chỉ từ thao tác cuộn.

Một trang trống vẫn có thể còn trang tiếp theo không?

Một trang trống vẫn có thể có phần tiếp tục khi hợp đồng của API cho phép. Việc lọc hoặc hành vi đặc thù dịch vụ có thể ảnh hưởng đến độ dài trang. Hãy dùng token, liên kết, hoặc cờ tiếp tục được ghi trong tài liệu thay vì cho rằng một trang ngắn hoặc trống luôn có nghĩa là bộ sưu tập đã kết thúc.

Phân trang có đảm bảo kết quả ổn định không?

Chỉ riêng phân trang không đảm bảo kết quả ổn định. Thứ tự sắp xếp, các thay đổi đồng thời và quy tắc snapshot quyết định tính nhất quán giữa các trang. Giữ nguyên bộ lọc và thứ tự sắp xếp, dùng danh tính bản ghi ổn định, và báo cáo xem nguồn có cung cấp ranh giới bộ dữ liệu cố định hay một lượt duyệt trực tiếp hay không.

Có nên tải tất cả các trang song song không?

Chỉ nên tải các trang song song khi vị trí của chúng có thể xác định độc lập và nguồn cho phép lưu lượng kết hợp đó. Một chuỗi con trỏ thường phụ thuộc vào các phản hồi trước đó. Công việc song song cũng cần một ngân sách chung và một quy tắc rõ ràng để hòa giải phạm vi phân vùng.

Điều gì chứng minh một lần thu thập phân trang là đầy đủ?

Một lần thu thập phân trang được coi là đầy đủ khi điều kiện kết thúc do nguồn định nghĩa đã được đạt tới và mọi trang được chấp nhận đều đã được lưu. Giới hạn số trang hoặc giới hạn thời gian là ranh giới công việc, vì vậy hãy báo cáo kết quả một phần khi có thể vẫn còn thêm trang nguồn.

Tài liệu tham khảo