XPath so với CSS Selectors: Bạn Nên Sử Dụng Cái Nào?
Trình duyệt Cạo Dữ Liệu Không Cạo hỗ trợ quy trình trích xuất DOM mà trong đó CSS selectors và XPath có thể được chọn theo từng trường.
TL;DR
- Sử dụng CSS selectors theo mặc định cho việc chọn HTML đơn giản. Chúng rất ngắn gọn cho ID, lớp, thuộc tính, tổ tiên, con, và anh chị em.
- Sử dụng XPath khi truy vấn phụ thuộc vào hướng cây hoặc điều kiện văn bản. Cha, tổ tiên, anh chị em trước và logic giá trị tính toán là các trường hợp tự nhiên của XPath.
- Hỗ trợ từ framework là ràng buộc đầu tiên. Một trình phân tích cú pháp chỉ hỗ trợ CSS hoặc chỉ một phiên bản XPath hạn chế quyết định cú pháp có sẵn.
- Sự ổn định của selector quan trọng hơn là họ hàng selector. Một biểu thức ngắn gắn với một lớp được tạo ra có thể không đáng tin cậy hơn một con đường rõ ràng dựa trên thuộc tính ổn định.
CSS selectors và XPath đều xác định các nút trong cây tài liệu đã phân tích. CSS selectors thường là mặc định rõ ràng cho các mẫu HTML thông thường, trong khi XPath có giá trị khi việc lựa chọn phụ thuộc vào việc di chuyển lên, kiểm tra văn bản hoặc diễn đạt các mối quan hệ phức tạp hơn.
Sự Khác Biệt Giữa XPath và CSS Selectors Là Gì?
CSS selectors khớp các phần tử theo mẫu và mối quan hệ; XPath đánh giá các biểu thức trên các nút và giá trị trong một cây.
| Khả năng | CSS Selectors | XPath |
|---|---|---|
| Cú pháp điển hình | article[data-id] h2 | //article[@data-id]//h2 |
| Duyệt xuống | Tổ hợp con và con cháu | Trục con và con cháu |
| Duyệt lên | Có thể trong một số trường hợp với :has(), nhưng không phải là trục cha chung | Trục cha và tổ tiên |
| Điều kiện nút văn bản | Không phải là tính năng selector tiêu chuẩn chung | Hỗ trợ thông qua các bài kiểm tra và hàm nút |
| Giá trị thuộc tính | Selector thuộc tính | Trục thuộc tính và điều kiện |
| API trình duyệt gốc | querySelector() và querySelectorAll() | document.evaluate() |
| dữ liệu XML | Được hỗ trợ bởi một số công cụ | Thiết kế cho các mô hình cây XML và namespace |
So sánh MDN so sánh kiến thức một số trục XPath với các tính năng CSS hiện đại và làm rõ rằng hai ngôn ngữ chồng chéo mà không hoàn toàn giống nhau.
Khi Nào Bạn Nên Chọn CSS Selectors?
Chọn CSS selectors khi tên phần tử, ID, lớp, thuộc tính dữ liệu hoặc quan hệ xuống ổn định xác định mục tiêu.
- Các bộ chứa bản ghi lặp lại. Khớp thẻ hoặc hàng, sau đó truy vấn các trường con bên trong mỗi bộ chứa.
- Các thuộc tính ổn định. Nhắm đến ID dữ liệu, tên, nhãn, hoặc mã lớp ngữ nghĩa.
- Trích xuất gốc từ trình duyệt. Sử dụng cùng một cú pháp với các API querySelector và nhiều thư viện phân tích HTML.
- Khả năng đọc hiểu của nhóm. Ưu tiên hình thức bộ chọn mà những người duy trì có thể kiểm tra và sửa chữa nhanh chóng.
Khi nào bạn nên chọn XPath?
Chọn XPath khi mục tiêu được mô tả tốt nhất thông qua tổ tiên, cha mẹ, anh chị em, văn bản hoặc cấu trúc đặc thù của XML.
- Mối quan hệ nhãn-giá trị. Tìm nhãn bằng văn bản và di chuyển đến nút giá trị liên kết.
- Khôi phục tổ tiên. Bắt đầu từ một hậu duệ ổn định và chọn bản ghi chứa.
- Biểu thức phức tạp. Kết hợp vị trí, thuộc tính, văn bản và mối quan hệ trong một biểu thức.
- XML và không gian tên. Mô hình cây truy vấn nơi XPath là ngôn ngữ đường dẫn gốc.
Bộ chọn nào Đáng Tin Cậy Hơn?
Không có gia đình bộ chọn nào tự nhiên đáng tin cậy hơn; sự ổn định đến từ các thuộc tính và mối quan hệ mà biểu thức phụ thuộc vào.
Một XPath tuyệt đối dài và một chuỗi CSS có vị trí dài đều có thể thất bại sau một thay đổi bao bọc vô hại. Hướng dẫn vị trí của Playwright cảnh báo rằng CSS và XPath liên kết với cấu trúc DOM có thể bị hỏng khi cấu trúc thay đổi. Đối với việc scraping, ưu tiên các thuộc tính nguồn bền bỉ, truy vấn có phạm vi, kiểm tra loại trang và xác thực đầu ra.
Hướng dẫn vị trí Selenium cũng ưu tiên các ID duy nhất khi chúng có thể đoán trước và một bộ chọn CSS viết tốt khi chúng không, đồng thời lưu ý về tính linh hoạt và chi phí gỡ lỗi của XPath.
Hướng Dẫn Quyết Định Thực Tế
Bắt đầu với hỗ trợ khung, sau đó sử dụng bộ chọn đơn giản nhất thể hiện một mối quan hệ dữ liệu ổn định.
Các Trường HTML Đơn Giản
Sử dụng CSS cho ID, lớp, thuộc tính, hậu duệ, con cái và anh chị em gần.
Các Truy Vấn Quan Hệ
Sử dụng XPath cho lựa chọn phụ huynh, tổ tiên, phụ thuộc văn bản hoặc có điều kiện cấu trúc.
Chuỗi Công Cụ Pha Trộn
Chọn cú pháp được hỗ trợ nhất quán trên bộ phân tích cú pháp, trình duyệt, bộ thử nghiệm và công cụ bảo trì.
Thay Đổi Trang
Cải thiện điểm neo nguồn và xác thực trước khi chuyển đổi ngôn ngữ bộ chọn.
CSS và XPath Thể Hiện Truy Vấn Tương Tự Như Thế Nào?
Cả hai ngôn ngữ đều có thể chọn các phần tử theo thẻ, định danh, lớp, thuộc tính, tổ tiên và mối quan hệ anh chị em. Một bộ chọn CSS thường phản ánh ghi chú mà các nhà phát triển đã sử dụng để định kiểu và truy vấn trình duyệt. XPath mô tả các bước thông qua cây tài liệu và có thể trả về các phần tử, thuộc tính hoặc giá trị tính toán tùy theo động cơ.
Cú pháp tương đương không đảm bảo khả năng đọc hiểu tương đương. Một liên kết sản phẩm trong một thẻ có nhãn tốt có thể ngắn gọn trong CSS. Một giá trị liên kết với một nhãn văn bản trước đó có thể rõ ràng hơn trong XPath. Dịch mối quan hệ bạn cần, sau đó đánh giá các biểu thức trong ngữ cảnh của bộ phân tích cú pháp và bài kiểm tra của nhóm.
Đừng so sánh các chuỗi bộ chọn mà không có phạm vi của chúng. Một bộ chọn toàn cục ngắn có thể không an toàn bằng một bộ chọn tương đối dài hơn chút được đánh giá bên trong mỗi bộ chứa bản ghi. Đơn vị thực sự của sự so sánh là quy tắc trích xuất: nút ngữ cảnh, bộ chọn, số lượng mong đợi và xác thực.
Khi nào CSS là Mặc Định Tốt Hơn?
CSS là một mặc định mạnh mẽ khi việc trích xuất theo tài liệu từ các bộ chứa ổn định đến các trường. ID, lớp, thuộc tính ngữ nghĩa, con cái trực tiếp, hậu duệ và anh chị em gần chiếm một phần lớn HTML thông thường. Cú pháp quen thuộc với các nhà phát triển front-end và được hỗ trợ rộng rãi bởi các API trình duyệt và thư viện phân tích cú pháp.
CSS cũng khuyến khích một mẫu chứa đầu tiên hữu ích. Chọn tất cả các thẻ bản ghi, sau đó truy vấn tiêu đề, liên kết và giá cả liên quan đến mỗi thẻ. Điều này giữ các giá trị được nhóm lại và làm cho các trường tùy chọn dễ xử lý hơn mà không cần logic vị trí phức tạp.
Mặc định vẫn nên dựa trên bằng chứng. Các lớp giả mới có thể không tồn tại trong mọi động cơ phía server, và một lớp được tạo ra không ổn định chỉ vì CSS có thể khớp nó. Kiểm tra tính tương thích và ưu tiên các bộ chọn liên kết với ý nghĩa của trang.
Khi nào XPath Làm Rõ Mối Quan Hệ?
XPath trở nên hấp dẫn khi lựa chọn phải đi lên, kết nối một nhãn với một giá trị gần đó, lọc qua văn bản chuẩn hóa, hoặc thể hiện một điều kiện trên tổ tiên và hậu duệ cùng nhau. Những mối quan hệ này có thể khó khăn hoặc không được hỗ trợ trong việc triển khai CSS được sử dụng bởi một dự án.
Cách bố trí kiểu bảng và kiểu định nghĩa là các ví dụ phổ biến. Nếu một giá trị không có lớp nhưng đi sau một ô hoặc tiêu đề với một nhãn đã biết, XPath có thể thể hiện mối quan hệ đó một cách trực tiếp. Biểu thức nên giữ phạm vi trong bảng, phần hoặc bản ghi thích hợp để một nhãn lặp lại ở nơi khác không tạo ra một sự khớp sai.
XPath dựa trên văn bản không tự động ổn định. Các nhãn có thể thay đổi tùy theo ngôn ngữ, dấu câu và từ ngữ biên tập. Sử dụng nó khi văn bản là một phần của hợp đồng bền bỉ của tài liệu, và thêm các thiết bị cho mọi địa phương hoặc mẫu được hỗ trợ.
Hiệu Suất Bộ Chọn Có Quyết Định Lựa Chọn Không?
Hiệu suất phụ thuộc vào động cơ, tài liệu, bộ chọn, ngữ cảnh và số lượng đánh giá. Một tìm kiếm rộng từ gốc tài liệu có thể làm nhiều công việc hơn so với một truy vấn có phạm vi trong cả hai ngôn ngữ. Việc render trình duyệt, truy xuất mạng và thực thi ứng dụng cũng có thể chiếm nhiều thời gian hơn so với đánh giá bộ chọn.
Đo lường chỉ sau khi công cụ cho thấy lựa chọn là một nút thắt có nghĩa. Đo thời gian cho mẫu trích xuất hoàn chỉnh trên các tài liệu đại diện, bao gồm lựa chọn bộ chứa và truy vấn trường theo bản ghi. Một microbenchmark lặp lại một bộ chọn nhân tạo có thể không dự đoán được hành vi của pipeline.
Khả năng đọc và độ chính xác thường có giá trị bảo trì lớn hơn. Một bộ chọn tiết kiệm một chút thời gian đánh giá nhưng làm mờ ranh giới bản ghi có thể gây ra những thất bại đắt giá về chất lượng dữ liệu. Tối ưu hóa phạm vi và số lần tìm kiếm lặp lại trước khi thay thế một biểu thức rõ ràng.
Một đội nên tiêu chuẩn hóa cách sử dụng bộ chọn như thế nào?
Định nghĩa một mặc định, chứ không phải cấm đoán. Một nhóm có thể sử dụng CSS cho các truy vấn thông thường đi xuống và cho phép XPath khi một truy vấn quan hệ rõ ràng hơn. Yêu cầu mỗi ánh xạ trường phải nêu rõ ngữ cảnh, số lượng dự kiến các kết quả trùng khớp và hành vi khi trường không có.
Giữ cả hai ngôn ngữ phía sau cùng một giao diện trích xuất khi có thể. Mã downstream nên nhận được giá trị trường kiểu và nguồn gốc thay vì quan tâm liệu CSS hay XPath tìm thấy nút. Điều này cho phép một trường thay đổi ngôn ngữ mà không làm thay đổi lược đồ bản ghi.
Xem xét mã nên tập trung vào các điểm neo ổn định, phạm vi, số lượng và các thiết lập. Sở thích ngôn ngữ kém quan trọng hơn việc quy tắc chọn trường đúng trên các biến thể trang đã biết. Tài liệu ngoại lệ để các nhà bảo trì sau này hiểu lý do tại sao ngôn ngữ không mặc định lại được chọn.
Chiến lược di cư nào hoạt động khi bộ chọn bị hỏng?
Trước tiên, xác định xem đánh dấu nguồn, giai đoạn kết xuất, loại trang hoặc công cụ bộ chọn đã thay đổi chưa. Chuyển từ CSS sang XPath sẽ không sửa chữa một phần tử mục tiêu bị thiếu hoặc một trang được lấy trong tình trạng sai.
Nếu phần tử vẫn còn tồn tại, xác định điểm neo ngữ nghĩa ổn định nhất gần nhất và xây dựng lại quy tắc có phạm vi ngắn nhất. Chạy biểu thức mới trên toàn bộ bộ thiết lập, bao gồm các bố cục vẫn sử dụng mẫu cũ. Khi các mẫu đồng tồn tại, định tuyến chúng một cách rõ ràng thay vì kết hợp các bộ chọn không liên quan thành một phương án dự phòng dài.
Theo dõi sự hoàn chỉnh của trường và số lượng không mong đợi sau khi triển khai. Một sự di cư bộ chọn chỉ hoàn thành khi đầu ra vẫn giữ nguyên nghĩa, không phải khi biểu thức ngừng ném lỗi. Xóa các ánh xạ lỗi thời sau khi có bằng chứng cho thấy loại trang của chúng không còn xuất hiện.
Kết luận
Bộ chọn CSS là mặc định thực tế cho trích xuất HTML thông thường, trong khi XPath xử lý các truy vấn phụ thuộc vào việc đi lên, văn bản và các mối quan hệ cây phong phú hơn. Sử dụng cả hai khi chuỗi công cụ hỗ trợ chúng, nhưng giữ mỗi bộ chọn ngắn gọn, có phạm vi và gắn với ngữ nghĩa trang ổn định.
Bạn đã sẵn sàng để xây dựng quy trình làm việc dữ liệu web của mình?
Sử dụng Scrapeless để truy xuất 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 bộ dữ liệu của bạn.
Bắt đầu miễn phí →Câu hỏi thường gặp
XPath có tốt hơn CSS cho việc cạo dữ liệu web không?
XPath tốt hơn cho một số truy vấn quan hệ và phụ thuộc vào văn bản, trong khi CSS thường rõ ràng hơn cho các thuộc tính HTML thông thường và các mối quan hệ đi xuống.
Có thể một dự án kết hợp các bộ chọn CSS và XPath không?
Có. Nhiều trình duyệt và khung phân tích hỗ trợ cả hai, vì vậy mỗi trường có thể sử dụng biểu thức ổn định rõ ràng nhất.
Các bộ chọn CSS có luôn nhanh hơn XPath không?
Không có tuyên bố hiệu suất phổ quát nào áp dụng cho tất cả các công cụ và tài liệu. Đo lường chuỗi công cụ thực tế của bạn nếu việc đánh giá bộ chọn là một yếu tố tắc nghẽn có ý nghĩa.
Điều gì nên được sửa chữa trước khi các bộ chọn tiếp tục hỏng?
Sửa chữa chiến lược neo và xác thực trước tiên: ưu tiên các thuộc tính bền vững, giới hạn truy vấn vào các container bản ghi và thử nghiệm nhiều biến thể trang.