JavaScript Rendering là gì? Giải thích về Dữ liệu Web

JavaScript Rendering là gì? Giải thích về Dữ liệu Web

Trình duyệt Scraping không có rác cung cấp một môi trường trình duyệt đám mây thực thi JavaScript và cung cấp trang đã được render đến các workflow tự động hóa.

TL;DR

  • JavaScript rendering mô tả một phần có thể quan sát được về cách các trang web hoặc hệ thống web hoạt động. Định nghĩa hữu ích kết nối khái niệm với dữ liệu, trạng thái và yêu cầu mà một workflow có thể xác minh.
  • HTML phản hồi và trạng thái trình duyệt không thể hoán đổi cho nhau. Một số giá trị có thể có ngay lập tức, trong khi những giá trị khác cần phải render, tương tác, hoặc phản hồi cấu trúc sau đó.
  • Chọn phương pháp nhẹ nhất mà trả về dữ liệu đầy đủ. Phân tích HTML khi đủ, kiểm tra các yêu cầu cấu trúc khi phù hợp, và sử dụng trình duyệt khi việc thực thi trình duyệt là thiết yếu.
  • Hoàn thành phải được chứng minh bằng bằng chứng nội dung. Các định danh ổn định, trạng thái kết thúc rõ ràng, và các điều kiện sẵn sàng cụ thể của nguồn an toàn hơn so với các khoảng trễ cố định.
  • Thu thập có trách nhiệm tôn trọng các quy tắc truy cập đã được công bố và khả năng. Tính khả thi công cộng không xóa bỏ điều khoản, nghĩa vụ pháp lý, chỉ thị robot, hoặc kiểm soát tỷ lệ.

JavaScript Rendering là gì?

JavaScript rendering là quá trình mà trình duyệt tải một tài liệu, thực thi các script trang, giải quyết trạng thái ứng dụng, và cập nhật DOM để giao diện phản ánh kết quả. Cụm từ này thường được sử dụng trong scraping và SEO để phân biệt phản hồi HTML thô với trạng thái trang có sẵn sau khi mã trình duyệt đã chạy.

Rendering rộng hơn là chỉ chạy một tệp script. Một trình duyệt phân tích HTML, khám phá các kiểu dáng và script, lên lịch các tác vụ, thực hiện các yêu cầu mạng, tính toán lại kiểu dáng, sắp xếp hộp, vẽ pixel, và phản hồi các sự kiện muộn hơn. JavaScript có thể tham gia vào quy trình đó nhiều lần, vì vậy một trang có thể có nhiều trạng thái đã được render có ý nghĩa hơn là chỉ một kết quả cuối cùng không thể thay đổi.

Một thư viện HTTP thông thường tải tài nguyên nhưng không cung cấp các API trình duyệt mà mã ứng dụng mong đợi. Nó không tự động tạo một DOM trực tiếp, thực thi các module, gắn các trình xử lý sự kiện, hoặc xử lý kiểu dáng hình ảnh. Khi dữ liệu mục tiêu phụ thuộc vào những hoạt động đó, một công cụ trình duyệt hoặc nguồn dữ liệu được ủy quyền cơ bản là cần thiết.

Sự phân biệt chính là thực tiễn: một workflow dữ liệu nên xác định lớp mà sở hữu giá trị mục tiêu. Lớp đó có thể là phản hồi tài liệu, bộ nhớ trình duyệt, một nút đã được render, một phản hồi nền, hoặc một chính sách phía máy chủ. Một khi lớp đó đã được biết đến, workflow có thể thu thập giá trị với ít giả định hơn và xác minh nó với hành vi trang mà người dùng thực sự nhận được.

Cách JavaScript Rendering Hoạt Động

JavaScript rendering trở nên dễ dàng hơn để lý luận khi quy trình được chia thành các giai đoạn có thể quan sát. Mỗi giai đoạn tạo ra bằng chứng có thể được kiểm tra trong phản hồi, trình duyệt, nhật ký mạng, hoặc tập hồ sơ đã được trích xuất.

Tài liệu ban đầu được phân tích

Trình duyệt bắt đầu xây dựng DOM từ phản hồi. Các script được phát hiện bởi parser có thể chạy trong quá trình phân tích, trong khi các script hoãn lại hoặc module chạy sau theo các quy tắc tải của chúng.

JavaScript thực thi trong ngữ cảnh trình duyệt

Mã trang có thể truy cập tài liệu, cửa sổ, lưu trữ, điều hướng, bộ định thời và API mạng được phép bởi môi trường. Những API đó cung cấp cho ứng dụng các đầu vào cần thiết để xây dựng giao diện.

Dữ liệu đến không đồng bộ

Các yêu cầu fetch, các module được nhập khẩu và các tài nguyên khác có thể hoàn thành sau sự kiện tài liệu đầu tiên. Mỗi sự hoàn thành có thể lên lịch thêm JavaScript và cập nhật DOM khác.

Trình duyệt tính toán trình bày

Các thay đổi DOM có thể kích hoạt tính toán kiểu dáng, bố cục, và vẽ. Scraping thường đọc DOM hoặc dữ liệu mạng, trong khi chụp màn hình hoặc kiểm tra trực quan cũng phụ thuộc vào bố cục và vẽ.

Các tương tác tạo ra các renders sau

Nhấp chuột, cuộn, thay đổi tuyến đường, và nhập mẫu có thể yêu cầu dữ liệu mới hoặc tiết lộ trạng thái hiện có. Tự động hóa phải tái tạo chỉ các tương tác cần thiết cho nội dung công cộng mà nó cần.

Các giai đoạn này có thể chồng chéo, lặp lại, hoặc được xử lý bởi các hệ thống khác nhau. Do đó, kế hoạch trích xuất nên theo dõi yêu cầu thực tế và trình tự trạng thái thay vì giả định rằng một sự kiện tải trang đại diện cho toàn bộ vòng đời. Công cụ phát triển trình duyệt hữu ích vì chúng đặt tài liệu, mạng, lưu trữ, và các chế độ chạy bên cạnh nhau.

Các Biểu Mẫu Chính và Các Khái Niệm Liên Quan

Các sự phân biệt sau đây ngăn ngừa các lỗi phân loại thường gặp. Chúng cũng giúp các nhóm lựa chọn một parser, người khách HTTP, trình duyệt, bộ lập lịch, hoặc chính sách thu thập cho công việc.

Khái niệmCái nó đại diện choSử dụng điển hình
Phân tích HTMLXây dựng một cây tài liệu từ markupHoạt động khi nội dung mục tiêu có trong phản hồi
JavaScript renderingThực thi mã trình duyệt và cập nhật trạng thái trangCần thiết cho nội dung được tạo ra bởi trình duyệt
Trích xuất API trực tiếpĐọc các phản hồi có cấu trúc được sử dụng bởi trangHiệu quả khi điểm cuối là phù hợp và ổn định
Kết xuất hình ảnhTính toán bố cục và tô điểm các pixelCần thiết cho ảnh chụp màn hình và các kiểm tra phụ thuộc vào bố cục

Một nhãn chỉ hữu ích khi nó dự đoán hành vi. Nếu hai tuyến trên cùng một trang web trả về dữ liệu qua các lớp khác nhau, hãy coi chúng như những bề mặt trích xuất khác nhau ngay cả khi nhóm sản phẩm mô tả chúng bằng một thuật ngữ kiến trúc.

Tại sao điều này quan trọng cho việc khai thác web và thu thập dữ liệu

Việc thu thập web thất bại âm thầm khi nó đọc lớp sai. Một trình phân tích cú pháp có thể trả về HTML hợp lệ mà không có các bản ghi mục tiêu. Một trình duyệt có thể tạo ra một giao diện thuyết phục trong khi một yêu cầu cần thiết bị từ chối. Một chuỗi có thể trả về các lô đầy đủ trong khi lặp lại các bản ghi giống nhau. Các kiểm tra dưới đây kết nối việc kết xuất JavaScript với chất lượng dữ liệu hơn là với sở thích công cụ.

Ứng dụng một trang

Một giao diện ban đầu có thể chứa ít văn bản hữu ích. Kết xuất tải mã tuyến và dữ liệu, sau đó tạo các nút trang mà các bộ chọn có thể đọc.

Nội dung sau tương tác

Kết quả tìm kiếm, thẻ, quy trình đồng ý và chi tiết có thể mở rộng có thể yêu cầu một hành động trước khi mục tiêu xuất hiện.

Tài nguyên tải lười

Hình ảnh, thẻ hoặc gợi ý có thể tải gần vùng nhìn thấy. Quy trình làm việc cần một cuộn giới hạn và một điều kiện dừng dựa trên nội dung.

Dữ liệu định dạng của khách hàng

Ngày tháng, giá cả và nhãn có thể được biến đổi trong trình duyệt. Việc thu thập nên bảo tồn các giá trị thô khi có sẵn và ghi lại các giá trị hiển thị riêng biệt.

Một trình duyệt là một tùy chọn trong cây quyết định đó. Trang sản phẩm Scrapeless Scraping Browser mô tả bề mặt trình duyệt được quản lý, trong khi Tài liệu bắt đầu của Scraping Browser bao gồm các tham số kết nối và phiên. Sử dụng kết xuất trình duyệt chỉ cho các trạng thái cần thực thi trình duyệt, và giữ các lối đi lấy dữ liệu và phân tích đơn giản hơn cho nội dung đã có trong các phản hồi.

Một quy trình chẩn đoán thực tế

Một chẩn đoán đáng tin cậy bắt đầu bằng cách so sánh, không phải mã tự động. Bảo tồn phản hồi đầu tiên, quan sát giao diện trực tiếp và liên kết mỗi trường mục tiêu với sự kiện hoặc tài nguyên tạo ra nó.

  1. Kiểm tra xem mục tiêu có xuất hiện trong phản hồi thô không. Nếu xuất hiện, việc kết xuất có thể gia tăng chi phí mà không làm tăng dữ liệu.
  2. Vô hiệu hóa JavaScript trong trình duyệt thử nghiệm và tải lại. Những khác biệt tiết lộ các tính năng phụ thuộc vào việc thực thi mã, mặc dù hành vi của máy chủ và các tài sản được lưu trữ có thể vẫn ảnh hưởng đến so sánh.
  3. Kiểm tra các yêu cầu mạng và người khởi xướng. Kết nối phản hồi chứa dữ liệu mục tiêu với mã và thành phần đặt nó trong DOM.
  4. Chờ một bộ chọn hoặc phản hồi chứng minh rằng mục tiêu đã sẵn sàng. Sự vắng mặt của một spinner đơn độc không đủ nếu nội dung có thể kết xuất trong nhiều lô.
  5. Ghi lại DOM đã được kết xuất và một bộ bằng chứng nhỏ như số lượng mục, khóa đầu tiên, khóa cuối cùng, và trạng thái rỗng. Những kiểm tra này phơi bày các kết xuất một phần trước khi dữ liệu đến lưu trữ.

Tài liệu kết quả dưới dạng một hợp đồng trích xuất nhỏ: mẫu URL mục tiêu, ngữ cảnh công khai, lớp nguồn, điều kiện sẵn sàng, trường bộ chọn hoặc phản hồi, khóa duy nhất, quy tắc tiếp tục, quy tắc kết thúc, và các kiểm tra xác thực. Hợp đồng này bền bỉ hơn một kịch bản chứa cùng các giả định mà không đặt tên cho chúng.

Sử dụng bằng chứng từ tài liệu kỹ thuật chính khi xác định hợp đồng. Các nền tảng liên quan cho chủ đề này bao gồm Hướng dẫn JavaScript của MDN Hướng dẫn về kết xuất và lập chỉ mục JavaScript của Google. Những nguồn này mô tả hành vi nền tảng và giao thức; hành vi trực tiếp của trang web mục tiêu vẫn cần được quan sát riêng.

Những sai lầm phổ biến

Hầu hết các thất bại xung quanh việc kết xuất JavaScript đến từ việc thay thế một tín hiệu thuận tiện cho trạng thái thực tế mà quy trình làm việc cần. Những sai lầm sau đây có thể trả về đầu ra hợp lý, điều này khiến chúng nguy hiểm hơn một lỗi rõ ràng.

  • Kết xuất mỗi trang lãng phí dung lượng trình duyệt khi hầu hết dữ liệu đã được kết xuất từ máy chủ.
  • Sử dụng một sự kiện tải chung làm điều kiện dừng có thể thu nhận giao diện ứng dụng trước khi dữ liệu kinh doanh đến.
  • Chặn các mã kịch bản hoặc tài nguyên API để tăng tốc có thể loại bỏ chính nội dung mà quy trình làm việc cần.
  • Chỉ đọc văn bản có thể nhìn thấy có thể loại bỏ các định danh và liên kết được lưu trữ trong các thuộc tính hoặc phản hồi ứng dụng.
  • Đối xử với trang lỗi của trình duyệt như một kết xuất thành công có thể lưu lại văn bản thách thức hoặc các giao diện rỗng như các bản ghi thực.

Bảo vệ khỏi những thất bại này bằng cách xác nhận ở mức nội dung. Yêu cầu một container đã biết, ít nhất một khóa ổn định khi có kết quả mong đợi, không có khóa trùng lặp trong một lô, thứ tự nhất quán nơi có thứ tự quan trọng, và một trạng thái rỗng hoặc kết thúc đã được công nhận. Lưu trữ đủ ngữ cảnh để tái sản xuất một kết quả đáng ngờ mà không ghi lại thông tin xác thực hoặc dữ liệu cá nhân.

Thực hành tốt nhất cho quy trình làm việc dễ bảo trì

Ưu tiên ý nghĩa ổn định hơn vị trí trực quan. Các bộ chọn và quy tắc nên mô tả vai trò của một giá trị, chứ không phải vị trí tạm thời của nó trong một bố cục. Khi một phản hồi có cấu trúc là nguồn công khai chính thức được sử dụng bởi trang, bảo tồn sự ánh xạ trường liên quan và xác thực nó với nhãn đã được kết xuất.

Làm cho trạng thái rõ ràng. Ghi lại địa điểm, vùng nhìn thấy, tuyến, giả định phiên công khai, bộ lọc, thứ tự sắp xếp, và các giá trị tiếp tục. Một giá trị không có trạng thái của nó có thể không thể so sánh với một lần nắm bắt sau đó.

Tách biệt Discovery, fetching, rendering, và extraction. Mỗi giai đoạn có chi phí và chế độ thất bại khác nhau. Việc tách biệt cho phép một công việc chỉ kết xuất các URL cần thiết, xử lý lại các phản hồi đã lưu mà không cần lưu lượng mới, và kiểm tra các bản ghi chưa hoàn chỉnh trước khi chúng vào các hệ thống hạ nguồn.

Sử dụng công việc giới hạn. Xác định số trang tối đa, hành động cuộn, yêu cầu hoạt động và bản ghi cho mỗi lần chạy. Các giới hạn bảo vệ cả dịch vụ mục tiêu và hệ thống thu thập khi một vòng điều khiển tiếp theo, một con trỏ lặp lại, hoặc một trang tạo ra một không gian thu thập bất ngờ.

Tôn trọng nhà xuất bản và người dùng. Kiểm tra robots.txt khi áp dụng, tuân theo các điều khoản và luật, chỉ thu thập các trường công khai cần thiết cho một mục đích xác định, tránh các khu vực riêng tư hoặc hạn chế, và giữ khối lượng yêu cầu trong một khoảng vừa phải. Truy cập kỹ thuật không giống như quyền cho mọi sử dụng.

Kết luận

Việc kết xuất Javascript hữu ích nhất như một mô hình hoạt động: xác định nơi dữ liệu tồn tại, quan sát cách trạng thái đó được tạo ra, và chọn phương pháp thu thập nhỏ nhất có thể tái sản xuất nó. Quy trình làm việc mạnh mẽ nhất so sánh trạng thái nguồn và trạng thái được kết xuất, theo tín hiệu tiếp tục rõ ràng, và xác thực các bản ghi với các khóa bền vững.

Bắt đầu với một URL đại diện và viết hợp đồng trích xuất trước khi mở rộng. Bước nhỏ đó tiết lộ thời gian ẩn, định tuyến, phân trang và giả định chính sách trong khi vẫn còn rẻ để sửa chữa. Chỉ mở rộng sau khi quy trình làm việc có thể giải thích tại sao mỗi bản ghi là hoàn chỉnh và từng trường đến từ đâu.

Sẵn sàng kiểm tra các trang được điều khiển bằng JavaScript?

Sử dụng Trình duyệt Thu thập không có rác khi một trang công khai yêu cầu thực thi trình duyệt, tương tác hoặc kiểm tra trạng thái được kết xuất.

Bắt đầu miễn phí →

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

Kết xuất JavaScript có nghĩa là gì?

Điều đó có nghĩa là chạy các tập lệnh trên trang trong môi trường có khả năng trình duyệt để chúng có thể lấy dữ liệu, thay đổi trạng thái ứng dụng, và cập nhật tài liệu mà người dùng hoặc mã tự động nhìn thấy.

Kết xuất JavaScript có giống như kết xuất phía máy khách không?

Kết xuất phía máy khách là một kiến trúc trong đó trình duyệt xây dựng phần lớn giao diện. Kết xuất JavaScript là quá trình thực thi khiến kiến trúc đó, cũng như nhiều kiến trúc lai, hoạt động.

Một thư viện yêu cầu HTTP có thể kết xuất JavaScript không?

Một thư viện HTTP cơ bản không thể. Nó có thể tải xuống các tập lệnh và gọi các điểm cuối, nhưng không thực hiện môi trường trình duyệt cần thiết để thực thi một ứng dụng web và duy trì DOM của nó.

Khi nào một trình thu thập nên tránh kết xuất trình duyệt?

Tránh khi mục tiêu có sẵn đáng tin cậy trong HTML phản hồi hoặc một điểm cuối có cấu trúc phù hợp. Con đường đơn giản hơn thường sử dụng ít tài nguyên hơn và có ít điều kiện về thời gian hơn.

Tài liệu tham khảo