Cách Xử Lý Phân Trang Khi Thu Thập Dữ Liệu
Scrapeless Agent Browser cung cấp các phiên trình duyệt trên đám mây có thể điều hướng các trang được phân trang và tương tác với các danh sách kết quả do JavaScript điều khiển.
Bạn Nên Xử Lý Phân Trang Khi Thu Thập Dữ Liệu Như Thế Nào?
Xử lý phân trang bằng cách xác định cơ chế tiếp tục của nguồn, trích xuất bản ghi với danh tính ổn định, chỉ chuyển tiếp sau khi kết quả hiện tại được chấp nhận, và dừng lại khi đạt trạng thái kết thúc đã được ghi nhận hoặc quan sát. Đặt một giới hạn độc lập cho lượt chạy để một cơ chế tiếp tục bị hỏng không thể tạo ra một quá trình thu thập vô hạn.
Phần khó là chứng minh được tiến độ. Nhãn trang có thể thay đổi trong khi các bản ghi vẫn giữ nguyên. Danh sách cuộn vô hạn có thể thay thế các node cũ thay vì mở rộng. Một phản hồi thành công có thể chứa một thông báo truy cập. Một bộ thu thập đúng phải kiểm tra nội dung và trạng thái quan trọng thay vì coi một lần nhấp hay một request là tương đương với một trang mới được chấp nhận.
Tóm tắt
- Làm theo hành vi tiếp tục đã quan sát. Khám phá các liên kết tiếp theo hoặc trạng thái request trước khi xây dựng URL trang.
- Dùng danh tính bản ghi để đo tiến độ. Số lượng phần tử và chiều cao cuộn là các tín hiệu hỗ trợ.
- Phân biệt điểm kết thúc của nguồn với giới hạn của lượt chạy. Giới hạn số trang tạo ra một tập hợp trong phạm vi giới hạn, không phải bằng chứng hoàn chỉnh.
- Giữ rõ ràng quyền truy cập nguồn và giới hạn khối lượng công việc. Truy cập bằng trình duyệt không mở rộng phạm vi được phép thu thập.
Nguồn Dùng Mẫu Phân Trang Nào?
Chuyển trạng thái thực tế của nguồn quyết định mẫu phân trang. Kiểm tra một trang đã được phê duyệt và quan sát điều gì xảy ra khi người dùng chuyển tiếp. Một liên kết tiếp theo có thể điều hướng sang tài liệu mới. Các nút được đánh số có thể thay đổi tham số truy vấn. Nút tải thêm có thể nối thêm bản ghi. Một sentinel cuộn có thể kích hoạt request khác mà không có nút hiển thị.
Kiểm tra các phản hồi có cấu trúc khi được phép truy cập và ý nghĩa của chúng được hiểu rõ. Giao diện trình duyệt có thể hiển thị số trang trong khi request bên dưới dùng một con trỏ mờ đục. Hãy dùng giao diện được hỗ trợ và ranh giới quyền truy cập; một endpoint có thể khám phá được không tự động trở thành API thu thập công khai.
| Mẫu | Hành động chuyển tiếp | Bằng chứng tiến độ | Bằng chứng kết thúc có thể có |
|---|---|---|---|
| Liên kết tiếp theo | Theo mục tiêu tiếp theo hiện tại | Các bản ghi mới mong đợi hoặc trạng thái tiếp tục | Xác nhận không còn mục tiêu tiếp theo hợp lệ |
| Trang được đánh số | Dùng điều hướng trang được hỗ trợ đã quan sát | Cửa sổ đã thay đổi với khóa bản ghi ổn định | Trang cuối cùng do nguồn xác định |
| Tải thêm | Kích hoạt điều khiển đang được bật | Danh tính mới được chấp nhận | Trạng thái cạn kiệt rõ ràng |
| Cuộn vô hạn | Di chuyển container hoặc sentinel liên quan | Danh tính mới hoặc trạng thái tiếp tục request | Tín hiệu kết thúc nguồn đã được xác nhận |
Bạn Theo Dõi Liên Kết Tiếp Theo Một Cách An Toàn Như Thế Nào?
Một bộ thu thập dùng liên kết tiếp theo đọc mục tiêu tiếp tục của trang hiện tại, chuẩn hóa các tham chiếu tương đối dựa trên URL trang, và xác thực đích đến trước khi theo nó. Mô hình mối quan hệ liên kết HTML bao gồm một quan hệ next, nhưng các trang web cũng có thể diễn đạt phân trang thông qua markup riêng của chúng.
Ưu tiên các thuộc tính ngữ nghĩa và cấu trúc trang ổn định hơn là các tên class sinh động khi những tín hiệu đó xác định được điều khiển dự kiến. Xác nhận rằng mục tiêu thực sự chuyển tiếp cùng một tập hợp kết quả thay vì mở một danh mục liên quan hay quảng cáo. Giữ nguyên ngữ cảnh bộ lọc và sắp xếp đã chọn.
Theo dõi các trạng thái trang đã truy cập để phát hiện vòng lặp. Một URL lặp lại có thể cho thấy một chu kỳ liên kết tiếp theo, nhưng một số ứng dụng dùng một URL cho nhiều trạng thái. Trong các trường hợp đó, hãy ghi nhận con trỏ liên quan, trạng thái trang nguồn, hoặc dấu vân tay của các khóa bản ghi đã được chấp nhận. Một lớp bảo vệ chỉ dựa trên URL sẽ dừng sai một danh sách có trạng thái hợp lệ.
Xác thực nguồn gốc đích đến trước khi gửi thông tin xác thực. Một liên kết được thu thập là đầu vào không tin cậy. Bộ thu thập không nên chuyển tiếp header ủy quyền hoặc vật liệu phiên sang một host không liên quan chỉ vì trang gọi liên kết đó là “next.”
Khi Nào Bạn Có Thể Dùng URL Trang Được Đánh Số?
Dùng URL trang được đánh số khi nguồn phơi bày và hỗ trợ mẫu URL đã quan sát. Xác nhận lần chuyển đầu tiên và bất kỳ tín hiệu trang cuối cùng nào trước khi xây dựng một dải. Đừng cho rằng mọi tập hợp đều dùng tham số truy vấn trang hoặc rằng số trang hiển thị tương ứng với bước bù số học đơn giản.
Các tập hợp thay đổi làm phức tạp quá trình duyệt theo trang được đánh số. Thêm hoặc xóa có thể làm dịch chuyển cửa sổ kết quả, tạo ra chồng lặp hoặc khoảng trống. Danh tính ổn định loại bỏ đầu ra trùng lặp, nhưng không thể khôi phục các bản ghi bị bỏ qua giữa các cửa sổ. Giữ thứ tự sắp xếp của nguồn cố định khi giao diện cho phép và báo cáo phạm vi quan sát của tập hợp.
The nhu cầu về một thứ tự duy nhất trong các truy vấn giới hạn minh họa vấn đề cơ bản. Một sắp xếp hiển thị theo mức độ phổ biến có thể thay đổi trong khi quá trình thu thập đang diễn ra. Ngay cả một sắp xếp theo trình tự thời gian cũng cần một chính sách phá vỡ thế hòa nếu các bản ghi có cùng thời điểm.
Danh sách Tải thêm và Cuộn vô hạn khác nhau như thế nào?
Danh sách tải thêm thể hiện một hành động rõ ràng, trong khi danh sách cuộn vô hạn kích hoạt việc tải khi một điều kiện khung nhìn liên quan được đáp ứng. Cả hai đều yêu cầu chờ tiến trình cụ thể của nguồn sau hành động. Một cú nhấp chuột hoàn tất hoặc một sự kiện cuộn được kích hoạt không chứng minh rằng đã có thêm bản ghi đến.
The cơ chế Intersection Observer giải thích cách các thay đổi về khả năng hiển thị có thể kích hoạt công việc bất đồng bộ. Một số trang web quan sát một sentinel bên trong vùng chứa cuộn lồng nhau thay vì khung nhìn của tài liệu. Cuộn tài liệu có thể không chạm tới sentinel đó.
Danh sách ảo hóa có thể tái sử dụng các phần tử DOM khi cửa sổ hiển thị di chuyển. Số lượng phần tử hoặc chiều cao trang có thể vẫn ổn định ngay cả khi các bản ghi mới trở nên hiển thị. Thu thập các khóa ổn định khi mỗi cửa sổ được quan sát, và sử dụng tín hiệu kết thúc hoặc trạng thái tiếp tục phù hợp với cách triển khai đó.
Một nút bị vô hiệu hóa cũng không rõ ràng trong khi đang tải. Phân biệt trạng thái đang tải tạm thời với trạng thái cạn kiệt do nguồn xác định. Nếu không thể thiết lập tiến trình trong khung thời gian quan sát được phép của lượt chạy, hãy dừng với kết quả chưa được giải quyết thay vì cho rằng nguồn đã kết thúc.
Một Ví Dụ Liên Kết-Tiếp Theo Có Giới Hạn Trông Như Thế Nào?
Một ví dụ có giới hạn có thể minh họa việc duyệt mà không khẳng định là đã thu thập đầy đủ. Chương trình Python sau đây sử dụng Books to Scrape demonstration catalogcông khai, theo liên kết tiếp theo quan sát được, xác thực host mong đợi và chấp nhận tối đa hai trang. Nó sử dụng thư viện tiêu chuẩn Python và không gọi Scrapeless.
Mã đã được thực thi cho ví dụ của bài viết này. Nó phát hiện các liên kết chi tiết sách từ các thẻ neo mang tiêu đề trong markup minh họa cụ thể này; quy tắc bộ chọn đó không phải là bộ phân tích mọi danh mục. Đầu ra dưới đây là kết quả đã được ghi lại, và trạng thái giới hạn số trang được đặt ra rõ ràng nhằm xác định một lần duyệt một phần.
from html.parser import HTMLParser
from urllib.parse import urljoin, urlparse
from urllib.request import Request, urlopen
class CatalogPage(HTMLParser):
def __init__(self):
super().__init__()
self.in_next = False
self.next_url = None
self.records = []
def handle_starttag(self, tag, attrs):
attrs = dict(attrs)
if tag == 'li' and 'next' in attrs.get('class', '').split():
self.in_next = True
if tag == 'a' and self.in_next:
self.next_url = attrs.get('href')
if tag == 'a' and 'title' in attrs:
self.records.append((attrs.get('href'), attrs['title']))
def handle_endtag(self, tag):
if tag == 'li':
self.in_next = False
url = 'https://books.toscrape.com/catalogue/page-1.html'
seen_pages, seen_items = set(), set()
reason = 'page cap'
for _ in range(2):
if urlparse(url).hostname != 'books.toscrape.com':
raise ValueError('Unexpected continuation host')
if url in seen_pages:
raise ValueError('Repeated page URL')
seen_pages.add(url)
with urlopen(Request(url, headers={'User-Agent': 'Mozilla/5.0'}),
timeout=20) as response:
if response.geturl() != url:
raise ValueError('Unexpected redirect')
document = response.read().decode('utf-8')
parser = CatalogPage()
parser.feed(document)
if not parser.records:
raise ValueError('Expected book records are absent')
for href, title in parser.records:
seen_items.add(urljoin(url, href))
print('Accepted page:', url, 'records:', len(parser.records))
if not parser.next_url:
reason = 'source end'
break
url = urljoin(url, parser.next_url)
print('Unique books:', len(seen_items), '| Stop:', reason)
Đầu ra đã ghi lại:
Accepted page: https://books.toscrape.com/catalogue/page-1.html records: 20
Accepted page: https://books.toscrape.com/catalogue/page-2.html records: 20
Unique books: 40 | Stop: page cap
Chương trình chấp nhận trang hiện tại trước khi chuyển tiếp, phát hiện URL trang trùng lặp và lưu trữ các URL mục duy nhất. Một quy trình sản xuất nên thay tập trong bộ nhớ bằng một đích đến có khóa và ranh giới tiến trình khớp với hợp đồng đầu ra của nó. Nó cũng nên phân biệt nguồn trống với lỗi trích xuất bằng cách sử dụng bằng chứng cụ thể của nguồn.
Trình duyệt cần thiết ở đâu?
Trình duyệt hữu ích khi phân trang yêu cầu thực thi JavaScript, điều khiển tương tác hoặc trạng thái phiên đã được ủy quyền. Scrapeless Agent Browser cung cấp bề mặt trình duyệt được kiểm soát đó. cấu hình kết nối Agent Browser mô tả cách thiết lập; bộ thu thập vẫn định nghĩa bộ chọn, kiểm tra tiến trình và lưu trữ.
The hướng dẫn phân trang Scrapeless bao quát các dạng điều khiển trang phổ biến. Sử dụng các dạng đó làm danh mục khám phá, rồi xác minh mục tiêu hiện tại. Heuristic chiều cao cuộn có thể là bằng chứng hữu ích trên một tài liệu thông thường tăng dần, nhưng không nên được coi là điều kiện kết thúc mang tính phổ quát.
Một trình duyệt không loại bỏ các hạn chế truy cập hay khiến bộ sưu tập trở nên đầy đủ. Khi một trang hiển thị thử thách truy cập hoặc lỗi quyền, hãy dừng chấp nhận nội dung của nó như các bản ghi và ghi lại kết quả truy cập. Giữ trạng thái phiên đã được ủy quyền nhất quán trên chuỗi trang nơi nguồn yêu cầu.
Bạn Nên Ghi Nhận Hoàn Tất Và Vận Hành Có Trách Nhiệm Như Thế Nào?
Ghi lại lý do lượt chạy kết thúc, ngữ cảnh thu thập và ranh giới bản ghi được chấp nhận. Cạn kiệt nguồn, giới hạn trang, giới hạn bản ghi, giới hạn thời gian trôi qua và tiến trình chưa được giải quyết là các trạng thái khác nhau. Lưu trữ đầu ra đã chấp nhận trước khi tiến điểm kiểm tra bền vững của nó để tránh việc gián đoạn âm thầm bỏ qua một cửa sổ.
Xem lại điều khoản của nguồn và các quy tắc thu thập áp dụng trước khi chạy một phiên thu thập. The Robots Exclusion Protocol mô tả các chỉ thị cho trình thu thập và phân biệt rõ ràng chúng với ủy quyền truy cập. Tôn trọng quy tắc robots là một phần của xử lý nguồn; bản thân nó không quyết định quyền thu thập hay tái sử dụng dữ liệu.
Giữ khối lượng công việc theo từng nguồn ở mức vừa phải và bị giới hạn bởi chính sách của nguồn. Thực hiện song song phù hợp chỉ khi các cửa sổ độc lập và khối lượng công việc được cho phép. Các chuỗi con trỏ thường yêu cầu khám phá tuần tự. Không phân tán một khối lượng công việc bị hạn chế trên nhiều danh tính để phá vỡ giới hạn dự định của nó.
Sử dụng Scrapeless pricing để lập kế hoạch chi phí thu thập bằng trình duyệt, rồi theo dõi các bản ghi duy nhất đã chấp nhận và các phân vùng chưa được giải quyết. Số lượng trang lớn hơn không phải là bằng chứng về một bộ dữ liệu tốt hơn nếu các trang bổ sung lặp lại bản ghi hoặc chứa nội dung không liên quan.
Kết luận
Chọn nhánh phân trang từ hành vi nguồn quan sát được, xác minh tiến trình bằng định danh ổn định và lưu giữ một lý do kết thúc rõ ràng. Một bộ thu thập nên có khả năng giải thích những trang hoặc trạng thái nào nó đã chấp nhận và tại sao nó cho rằng phạm vi kết quả là đầy đủ hay một phần.
Đưa Lớp Thu Thập Vào Thực Tiễn
Chọn khả năng thu thập Scrapeless phù hợp với nguồn của bạn, rồi áp dụng các quyết định xác thực và vận hành được mô tả ở trên.
Đăng ký hôm nay và nhận $5 in free credit — không cần thẻ tín dụng.
Nhận $5 Credit của bạn →Câu hỏi thường gặp
Việc thu thập dữ liệu công khai có phân trang luôn được cho phép không?
Không. Chỉ riêng việc hiển thị công khai không quyết định được quyền truy cập, điều khoản, nghĩa vụ về quyền riêng tư hoặc quyền tái sử dụng. Hãy xác định rõ nguồn và mục đích được phép trước khi thu thập.
Các quy trình phân trang có luôn cần proxy không?
Không. Nhu cầu phụ thuộc vào nguồn và phương thức triển khai đã được phê duyệt. Proxy không mở rộng quyền truy cập cũng không loại bỏ yêu cầu tuân thủ chính sách tải của nguồn.
Nếu một trang truy cập xuất hiện thay vì dữ liệu thì sao?
Đánh dấu trạng thái bị ảnh hưởng là một kết quả truy cập và dừng chấp nhận nó là nội dung tập dữ liệu. Xác nhận phiên được ủy quyền và chính sách nguồn trước khi tiếp tục công việc thu thập.
Nếu markup của trang web thay đổi thì sao?
Kiểm tra lại cấu trúc bản ghi hiện tại và cấu trúc tiếp nối, sau đó cập nhật các bộ chọn (selector) và kiểm tra chấp nhận dành riêng cho nguồn. Một bộ chọn không trả về mục nào không chứng minh rằng nguồn trống.
Phân trang có thể chạy mà không cần tác nhân AI không?
Có. Ví dụ Python có giới hạn chạy trực tiếp mà không cần tác nhân AI. Các quy trình phụ thuộc trình duyệt cũng có thể dùng mã tự động hóa thông thường với các kiểm tra trạng thái và tiến độ rõ ràng.
Chuỗi trang có thể chạy đồng thời không?
Chỉ những cửa sổ có thể xử lý độc lập mới nên được xem xét để thu thập song song, trong phạm vi tải cho phép của nguồn. Một chuỗi next-token thường phụ thuộc vào phản hồi trước đó.