Phân Tích HTML Là Gì?
API Scraping Toàn Cầu Không Có Rác thu thập và hiển thị HTML của trang công khai mà các bộ phân tích hạ nguồn có thể chuyển đổi thành một cây tài liệu có thể truy vấn.
TL;DR
- Phân tích HTML biến đánh dấu thành một cây tài liệu. Các phần tử, thuộc tính, văn bản và bình luận trở thành các nút mà mã có thể duyệt qua hoặc truy vấn.
- HTML sử dụng các quy tắc xử lý lỗi riêng. Trình duyệt có thể xây dựng một DOM có thể sử dụng từ các đánh dấu mà không được định dạng tốt như XML.
- Phân tích không thực thi JavaScript của trang. Một bộ phân tích đọc đánh dấu được cung cấp; một môi trường thời gian chạy của trình duyệt có thể cần thiết để lấy DOM sau khi hiển thị.
- Chọn lọc hoạt động sau khi phân tích. Các bộ chọn CSS và XPath xác định vị trí các nút trong cây; trích xuất sau đó sẽ đọc và chuẩn hóa các giá trị của chúng.
Phân tích HTML là quá trình đọc nguồn HTML và xây dựng một cây tài liệu có cấu trúc. Kết quả là một Mô Hình Đối Tượng Tài Liệu, hoặc DOM, chứa các nút phần tử, nút văn bản, thuộc tính, bình luận, và các mối quan hệ giữa cha mẹ, con cái và anh chị em.
Cái Tiêu Chuẩn HTML WHATWG định nghĩa hành vi phân đoạn và xây dựng cây cho các tài nguyên text/html. Những quy tắc đó giải thích tại sao đánh dấu nguồn và DOM kết quả có liên quan nhưng không luôn giống nhau.
Phân Tích HTML Hoạt Động Như Thế Nào?
Phân tích HTML phân đoạn đánh dấu và áp dụng các quy tắc xây dựng cây để tạo ra một DOM.
- Đọc ký tự. Bộ phân tích tiêu thụ đầu vào HTML như một luồng.
- Tạo token. Thẻ bắt đầu, thẻ kết thúc, văn bản, bình luận, và tuyên bố kiểu tài liệu trở thành token.
- Xây dựng cây. Các chế độ chèn và quy tắc phần tử mở quyết định mỗi token thuộc về đâu.
- Khôi phục đánh dấu có thể sửa chữa. Bộ phân tích có thể suy diễn các phần tử, đóng các phần tử mở hoặc di dời các nút theo tiêu chuẩn.
- Tiết lộ DOM. Mã có thể duyệt qua các nút kết quả hoặc truy vấn chúng bằng các API chọn lọc hỗ trợ.
Phân Tích HTML so với Hiển Thị
Phân tích tạo ra cây tài liệu; hiển thị tính toán bố cục và vẽ trang trực quan.
| Giai đoạn | Đầu vào | Đầu ra |
|---|---|---|
| Lấy | URL và cài đặt yêu cầu | Byte phản hồi HTTP |
| Phân tích | Văn bản HTML | Cây DOM |
| Thực thi kịch bản | DOM và JavaScript | DOM có thể được sửa đổi |
| Hiển thị | DOM, CSS, trạng thái bố cục | Pixel và trình bày tương tác |
| Trích xuất | DOM hoặc phản hồi có cấu trúc | Các bản ghi đã chọn |
Hướng dẫn quy trình trình duyệt của MDN mô tả quá trình phân tách, xây dựng cây, và tương tác giữa phân tích cú pháp và chặn các tập lệnh.
Đối với các chuỗi trong bộ nhớ, DOMParser.parseFromString() cho thấy hình thái API trình duyệt để chuyển đổi mã nguồn HTML hoặc XML thành một Tài liệu.
Tại sao việc phân tích cú pháp HTML lại quan trọng cho việc thu thập dữ liệu web?
Phân tích cú pháp HTML cung cấp cho các trình thu thập dữ liệu một mô hình cấu trúc an toàn và chính xác hơn so với việc tìm kiếm mã dạng thô như văn bản đơn giản.
Lựa chọn trường
Xác định thẻ sản phẩm, tiêu đề, bảng, liên kết và siêu dữ liệu theo cấu trúc và thuộc tính.
Dọn dẹp văn bản
Đọc nội dung văn bản mà không giữ lại thẻ, chú thích, hoặc mã điều hướng không liên quan.
Giải quyết liên kết
Trích xuất thuộc tính href và giải quyết URL tương đối đối với cơ sở tài liệu.
Xác thực nội dung
Kiểm tra rằng các phần tử cần thiết tồn tại và rằng các nút được chọn có mối quan hệ mong đợi.
Những sai lầm phổ biến khi phân tích cú pháp HTML
Hầu hết các lỗi phân tích đều đến từ việc sử dụng đầu vào sai, giả định quy tắc XML, hoặc ghép việc trích xuất với các chi tiết bố cục yếu.
- Phân tích phản hồi ban đầu khi dữ liệu xuất hiện sau. Kiểm tra DOM đã kết xuất hoặc phản hồi mạng có cấu trúc khi JavaScript tạo ra nội dung.
- Xem HTML như XML được định dạng tốt. Sử dụng bộ phân tích HTML cho text/html vì HTML có các quy tắc sửa lỗi khác nhau.
- Tìm kiếm mã hóa với các biểu thức chính quy rộng. Phân tích cây, sau đó chọn các nút theo cấu trúc và thuộc tính ổn định.
- Giả định mỗi trang đều có mọi mô-đun. Mô hình các phần tử tùy chọn như có thể chấp nhận và xác thực loại trang trước khi trích xuất.
Điều gì xảy ra trong quá trình phân tách?
Phân tách đọc luồng ký tự đầu vào và nhận diện các cấu trúc như thẻ bắt đầu, thẻ kết thúc, dữ liệu ký tự, nhận xét, và loại tài liệu. Bộ phân tách giữ trạng thái vì các ký tự giống nhau có thể có nghĩa khác nhau trong văn bản bình thường, giá trị thuộc tính, nhận xét, các phần tử văn bản thô, hoặc dữ liệu tập lệnh.
Các tham chiếu ký tự được giải quyết theo các quy tắc HTML, thuộc tính được gán cho các thẻ mã, và lỗi phân tích được xử lý mà không nhất thiết phải dừng tài liệu. Hành vi này là một lý do mà một bộ phân tích HTML được ưa chuộng hơn việc chia tách chuỗi đơn giản. Một dấu nhỏ hơn bên trong một tập lệnh hoặc một dấu & trong văn bản không thể được diễn giải chính xác mà không có ngữ cảnh.
Chỉ phân tách một mình không tạo ra cấu trúc phần tử cuối cùng. Các phần tử cung cấp giai đoạn xây dựng cây, giai đoạn quyết định nơi các nút thuộc về và cách mà mã định dạng sai hoặc bị thiếu ảnh hưởng đến cấu trúc tài liệu.
Xây dựng cây sửa đổi HTML như thế nào?
Xây dựng cây sử dụng các chế độ chèn và một ngăn xếp các phần tử mở để tạo ra DOM. Thuật toán có thể suy ra các phần tử bị thiếu, đóng các phần tử khi một thẻ mới làm cho việc lồng ghép trước đó không hợp lệ, và xử lý các ngữ cảnh đặc biệt như bảng. Do đó, DOM có thể chứa các nút hoặc mối quan hệ không được viết rõ ràng trong văn bản nguồn.
Mã hóa bảng là một ví dụ phổ biến. Nội dung được đặt ở một vị trí không hợp lệ có thể được di chuyển theo quy tắc phân tích. Các phần tử đoạn cũng có thể đóng ngầm khi một số phần tử cấp khối bắt đầu. Logic trích xuất nên kiểm tra cây đã phân tích thay vì suy diễn việc lồng ghép từ việc thụt lề hoặc đọc nhanh mã nguồn.
Các thư viện bộ phân tích khác nhau nhắm đến việc triển khai tiêu chuẩn HTML nhưng có thể lộ ra các API và mức độ tuân thủ khác nhau. Kiểm tra thư viện thực tế với các trang bị định dạng sai đại diện nếu hình dạng cây chính xác quan trọng với quy trình.
Mã hóa và loại nội dung ảnh hưởng đến phân tích như thế nào?
Bộ phân tích cần mã hóa ký tự chính xác để chuyển đổi byte phản hồi thành các ký tự. Một mã hóa sai có thể làm hỏng tên, giá cả, dấu câu, và các giá trị thuộc tính liên quan đến trình chọn trước khi quá trình xây dựng cây bắt đầu. Tôn trọng siêu dữ liệu phản hồi đáng tin cậy và hành vi phát hiện mã hóa đã được tài liệu của bộ phân tích.
Loại nội dung cũng quan trọng. HTML và XML có các quy tắc phân tích và hành vi lỗi khác nhau. XML thường yêu cầu đầu vào được định dạng tốt và xử lý nhận thức không gian tên, trong khi HTML định nghĩa hành vi phục hồi cho các lỗi mã chung. Cho text/html vào bộ phân tích XML có thể từ chối một trang mà các trình duyệt hiển thị, trong khi cho XML vào bộ phân tích HTML có thể làm mất nghĩa không gian tên hoặc cách viết hoa.
Ghi lại loại nội dung phản hồi cuối cùng và URL cùng với việc thu thập. Một URL trang tiêu chuẩn có thể trả về JSON, một tệp tải xuống, một trang truy cập, hoặc một định dạng khác dựa trên ngữ cảnh yêu cầu. Chọn bộ phân tích chỉ sau khi kiểm tra những gì dịch vụ thực sự đã trả về.
Các tập lệnh tương tác với bộ phân tích như thế nào?
Trong một trình duyệt, một số phần tử tập lệnh nhất định có thể tạm dừng việc phân tích HTML trong khi mã được lấy và thực thi. Mã đó có thể kiểm tra DOM đã được xây dựng một phần, viết mã thêm, hoặc lập lịch các thay đổi sau đó. Các tập lệnh khác tải mà không chặn theo cách tương tự và có thể cập nhật trang sau khi việc phân tích ban đầu hoàn tất.
Một bộ phân tích độc lập không tái tạo chu trình ứng dụng chỉ bằng cách xây dựng cây ban đầu. Nếu dữ liệu cần thiết được chèn bởi các tập lệnh, quy trình làm việc trích xuất cần một trình duyệt hoặc một phản hồi có cấu trúc chứa thông tin giống nhau. Đầu vào chính xác có thể là DOM đã kết xuất, nhưng cũng có thể là một phản hồi API quan sát trong quá trình kết xuất.
Chọn một điều kiện hoàn thành liên kết với nội dung mục tiêu. Việc tải tài liệu một mình có thể xảy ra trước khi ứng dụng khách hoàn tất yêu cầu dữ liệu của nó, trong khi lưu lượng phân tích liên tục có thể làm cho các điều kiện mạng nhàn rỗi không phù hợp. Một phần tử, phản hồi, hoặc trạng thái ứng dụng liên quan đến mô-đun cần thiết có ý nghĩa hơn.
Cách bạn kiểm tra một bộ phân tích HTML cho việc trích xuất?
Các bài kiểm tra bộ phân tích nên bao gồm mã hợp lệ, các thẻ bị bỏ qua, lồng ghép không hợp lệ, thực thể, chú thích, bảng, tập lệnh, văn bản không phải ASCII, và các tài liệu trống. So sánh cây kết quả với hành vi yêu cầu bởi các quy tắc trích xuất thay vì chỉ kiểm tra xem việc phân tích có trả về mà không có ngoại lệ hay không.
Các bài kiểm tra trích xuất nên hoạt động trên cây đã phân tích và xác nhận ranh giới bản ghi, văn bản trường, thuộc tính và các mô-đun tùy chọn. Bao gồm các trang có nguồn và DOM khác nhau để nhóm biết liệu một quy tắc mong đợi HTML của máy chủ hay HTML đã được hiển thị.
Khi một phiên bản phân tích cú pháp hoặc thư viện thay đổi, hãy chạy lại tập hợp đại diện. Một sự khác biệt nhỏ trong việc sửa chữa cây, chuẩn hóa văn bản hoặc hỗ trợ bộ chọn có thể thay đổi các bản ghi đã trích xuất. Phiên bản phân tích cú pháp và ngăn xếp trích xuất cùng với sơ đồ để nguồn gốc của một sự thay đổi vẫn có thể theo dõi được.
Kết luận
Phân tích HTML chuyển đổi đánh dấu thành DOM mà trình duyệt và công cụ trích xuất có thể truy vấn. Việc trích xuất đáng tin cậy bắt đầu bằng cách chọn đầu vào chính xác - HTML nguồn hoặc HTML đã được hiển thị - sau đó sử dụng các bộ chọn cấu trúc và xác thực sơ đồ trên cây tạo ra.
Sẵn sàng để Xây dựng Quy trình Dữ liệu Web của Bạn?
Sử dụng Scrapeless để lấy nội dung web công khai, sau đó áp dụng mẫu phát hiện và trích xuất phù hợp với tập dữ liệu của bạn.
Bắt đầu Miễn Phí →Câu hỏi thường gặp
Phân tích HTML có giống như thu thập dữ liệu trên web không?
Không. Phân tích HTML xây dựng một cây tài liệu; thu thập dữ liệu trên web cũng bao gồm việc truy xuất, lựa chọn, làm sạch, xác thực và lưu trữ.
Một trình phân tích HTML có thực thi JavaScript không?
Một trình phân tích HTML độc lập thường không thực thi JavaScript. Một môi trường trình duyệt có thể thực thi các kịch bản và cung cấp DOM kết quả.
Tại sao DOM có thể khác với nguồn trang?
Trình phân tích HTML có thể sửa chữa đánh dấu và ngụ ý các phần tử, trong khi JavaScript có thể thêm, xóa hoặc thay đổi các nút sau khi phân tích.
Có thể sử dụng bộ chọn CSS mà không cần phân tích HTML không?
Các bộ chọn CSS hoạt động trên một cây tài liệu, vì vậy đánh dấu phải được phân tích trước hoặc được cung cấp qua một môi trường đã cung cấp một DOM.