🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
XPath là gì? Cú pháp đường dẫn, trục và ví dụ về trích xuất

XPath là gì?

Trình duyệt Thu thập Dữ liệu Không có Tạp chí cung cấp nội dung DOM của các trang công khai đã được hiển thị mà các quy trình trích xuất có thể điều hướng bằng các biểu thức XPath.

TL;DR

  • XPath là một ngôn ngữ biểu thức để chọn các giá trị và nút trong dữ liệu có cấu trúc cây. Cú pháp đường dẫn của nó có thể điều hướng các con, tổ tiên, cha mẹ, tổ tiên, anh chị em và thuộc tính.
  • XPath hoạt động từ một nút ngữ cảnh. Các đường dẫn tuyệt đối bắt đầu từ gốc tài liệu; các đường dẫn tương đối bắt đầu từ ngữ cảnh hiện tại.
  • Các điều kiện lọc các nút ứng viên. Các giá trị thuộc tính, vị trí, kiểm tra văn bản và hàm có thể thu hẹp một đường dẫn.
  • XPath hữu ích khi việc lựa chọn phụ thuộc vào các mối quan hệ. Việc đi qua cha hoặc tổ tiên và các điều kiện phụ thuộc vào văn bản là lý do phổ biến để chọn nó.

XPath, viết tắt của Ngôn ngữ Đường dẫn XML, là một ngôn ngữ biểu thức được sử dụng để chỉ định các nút và giá trị trong một cây. Mặc dù tên của nó xuất phát từ XML, các API trình duyệt và tự động hóa có thể đánh giá XPath chống lại các tài liệu HTML.

Cái Khuyến nghị W3C XPath 3.1 định nghĩa XPath là một ngôn ngữ biểu thức mà các biểu thức đường dẫn của nó cung cấp địa chỉ theo phân cấp trong một mô hình dữ liệu.

XPath hoạt động như thế nào?

XPath đánh giá một biểu thức chống lại một ngữ cảnh và trả về các nút khớp hoặc các giá trị đã tính toán.

Một đường dẫn được tạo thành từ các bước. Mỗi bước chọn một trục, áp dụng một bài kiểm tra nút và có thể thêm các điều kiện. Biểu thức //article[@data-id] chọn các con của bài viết có thuộc tính data-id. Biểu thức .//h2 tìm kiếm các con H2 của nút ngữ cảnh hiện tại.

Các phần chính của một biểu thức XPath là gì?

XPath kết hợp các bước vị trí, trục, bài kiểm tra nút, điều kiện và hàm.

Cú phápMục đíchVí dụ
/Bắt đầu một đường dẫn tuyệt đối hoặc tách các bước con/html/body
//Chọn các con từ điểm hiện tại//main//a
.Tham chiếu đến ngữ cảnh hiện tại.//span
..Di chuyển đến cha//span/..
@Chọn hoặc kiểm tra một thuộc tính//a/@href
[ ]Lọc các nút ứng viên//li[@data-id]

Trục XPath là gì?

Các trục XPath mô tả mối quan hệ giữa nút ngữ cảnh và các nút ứng viên.

  • Con và hậu duệ. Di chuyển xuống một cấp hoặc tìm kiếm qua các hậu duệ sâu hơn.
  • Cha và tổ tiên. Di chuyển lên từ một nút đã biết đến một phần tử chứa.
  • Anh/chị em đi sau và anh/chị em đi trước. Chọn các nút bên cạnh nút ngữ cảnh.
  • Thuộc tính. Chọn thuộc tính thay vì các nút phần tử.
  • Bản thân. Kiểm tra hoặc giữ lại nút ngữ cảnh hiện tại.

XPath được sử dụng như thế nào trong thu thập dữ liệu web?

Các trình thu thập dữ liệu web sử dụng XPath để xác định các phần tử, thuộc tính và văn bản dựa trên cấu trúc và mối quan hệ của tài liệu.

Lựa chọn phụ thuộc văn bản

Tìm một nhãn hoặc tiêu đề theo văn bản, sau đó chọn một giá trị gần đó.

Duyệt tổ tiên

Bắt đầu tại một nút trẻ ổn định và di chuyển đến khối chứa bản ghi sở hữu nó.

Mối quan hệ giữa anh chị em

Chọn một giá trị theo sau một nhãn đã biết khi trang thiếu thuộc tính hữu ích.

Nguồn XML

Điều hướng các nguồn cấp dữ liệu hoặc tài liệu XML khác với tên miền và cấu trúc tài liệu cụ thể.

Trình duyệt Document.evaluate() phương thức đánh giá một biểu thức XPath đối với một nút ngữ cảnh và trả về một XPathResult.

The MDN XPath và so sánh CSS cho thấy nơi các trục tương ứng với các kết hợp CSS hoặc các lớp giả mới hơn và nơi XPath giữ các khả năng khác biệt.

Bạn viết XPath có thể bảo trì như thế nào?

XPath có thể bảo trì sử dụng các thuộc tính ổn định và các mối quan hệ địa phương thay vì sao chép một đường dẫn tuyệt đối từ gốc tài liệu.

  1. Chọn một nút ngữ cảnh ổn định như một khối chứa bản ghi.
  2. Sử dụng các thuộc tính hoặc nhãn cụ thể thể hiện ý nghĩa.
  3. Giới hạn các tìm kiếm con cháu rộng khi có một ngữ cảnh nhỏ hơn.
  4. Tránh các đường dẫn vị trí dài gắn liền với bố cục hiện tại.
  5. Kiểm tra biểu thức trên nhiều biến thể trang và xác nhận số lượng kết quả.

Làm thế nào một biểu thức XPath được đánh giá?

XPath đánh giá một biểu thức đối với một nút ngữ cảnh. Một bước vị trí chọn các nút dọc theo một trục, áp dụng một bài kiểm tra nút, và sau đó lọc chuỗi kết quả bằng các điều kiện. Ngữ cảnh là quan trọng: một biểu thức bắt đầu bằng // tìm kiếm các con cháu từ một gốc rộng hơn, trong khi một biểu thức tương đối bắt đầu bằng . giữ nguyên ở khối chứa bản ghi hiện tại.

Mô hình đánh giá này giải thích tại sao biểu thức giống nhau có thể trả về các kết quả khác nhau trong bảng điều khiển trình duyệt và bên trong vòng lặp phân tích. Nếu vòng lặp đã giữ một thẻ sản phẩm, một đường dẫn tương đối nên bắt đầu từ thẻ đó. Một tìm kiếm con cháu không có phạm vi có thể thoát khỏi bản ghi được dự định và lặp đi lặp lại trả về giá trị khớp đầu tiên trên trang.

Thứ tự nút và loại kết quả cũng quan trọng. Một biểu thức có thể tạo ra một chuỗi nút, chuỗi, số hoặc boolean tùy thuộc vào động cơ và API gọi. Đọc hợp đồng thư viện để mã trích xuất không tình cờ chuyển đổi thành chuỗi nút sai hoặc bỏ qua nhiều kết quả.

Các trục XPath nào quan trọng cho việc trích xuất web?

Cac trục con và con cháu bao phủ hầu hết các điều hướng hướng xuống. Thuộc tính chọn các giá trị gắn liền với một phần tử. Cha và tổ tiên di chuyển lên trên khi một trường phải liên quan đến một phần có nhãn hoặc bản ghi bao quanh. Anh chị em tiếp theo và anh chị em trước đó kết nối các phần tử gần nhau chia sẻ một bậc cha mẹ.

Các trục rất hữu ích vì chúng mô tả mối quan hệ thay vì vị trí tuyệt đối. Một mức giá có thể được chọn từ cùng một thẻ như một tiêu đề sản phẩm ngay cả khi các thẻ không liên quan sử dụng các lớp tương tự. Một giá trị bảng có thể được liên kết với một ô tiêu đề khi không có lớp cột riêng biệt nào tồn tại.

Các trục rộng cũng có thể tạo ra các kết quả ẩn. Một tìm kiếm tổ tiên mà leo lên quá cao có thể đến cơ thể trang, và một tìm kiếm theo sau có thể vượt vào một bản ghi khác. Giới hạn trục với một bài kiểm tra nút cụ thể và điều kiện, sau đó kiểm tra nó trả về bao nhiêu nút trên mỗi mẫu đại diện.

Cách thức hoạt động của các điều kiện XPath?

Các điều kiện lọc các nút được chọn bởi một bước. Chúng có thể kiểm tra thuộc tính, phần tử con, văn bản chuẩn hóa, vị trí hoặc tổ hợp các điều kiện. Bởi vì các điều kiện chạy trong một ngữ cảnh, vị trí tương đối với chuỗi nút hiện tại chứ không phải một chỉ số toàn cầu trong mã nguồn ban đầu.

Tính bình đẳng thuộc tính thường rõ ràng hơn vị trí khi trang hiển thị một định danh có ý nghĩa. Các điều kiện văn bản hữu ích khi một nhãn định nghĩa mối quan hệ, nhưng ngôn ngữ có thể thay đổi trên các địa phương hoặc các bản sửa đổi biên tập. Chuẩn hóa khoảng trắng khi cần và tránh một sự trùng khớp văn bản một phần có thể chấp nhận một số nhãn không liên quan.

Giữ cho các điều kiện nhỏ đủ để giải thích. Nếu một biểu thức kết hợp nhiều nhãn thay thế, tổ tiên sâu và vị trí số, hãy tách phân loại trang khỏi việc chọn trường. Một XPath ngắn cho mỗi mẫu đã biết thường dễ kiểm tra hơn là một biểu thức dự định tồn tại qua mọi trang có thể.

Không gian tên là gì trong XPath?

Các không gian tên phân biệt các phần tử chia sẻ một tên địa phương nhưng thuộc về các từ vựng khác nhau. Chúng đặc biệt quan trọng đối với XML, SVG và tài liệu hỗn hợp. Một tiền tố không gian tên trong một biểu thức XPath phải được liên kết với URI không gian tên chính xác thông qua API được sử dụng bởi trình duyệt hoặc trình phân tích.

Các tài liệu HTML được phân tích dưới dạng HTML thường có hành vi không gian tên khác với các tài liệu XHTML hoặc XML. Một biểu thức hoạt động trên DOM HTML có thể thất bại khi mã nguồn trông giống nhau được xử lý qua một trình phân tích XML. Xác nhận loại nội dung phản hồi và chế độ phân tích trước khi điều chỉnh đường dẫn.

Nếu SVG nhúng hoặc một không gian tên khác là một phần của mục tiêu, hãy thử nghiệm trực tiếp trong động cơ đã chọn. Một số API tiện lợi cung cấp các trợ giúp phân giải không gian tên, trong khi những cái khác yêu cầu ánh xạ rõ ràng. Đừng gỡ bỏ các kiểm tra không gian tên chỉ để làm cho một biểu thức khớp; điều đó có thể chọn một phần tử không mong muốn với cùng một tên địa phương.

Bạn làm thế nào để gỡ lỗi và bảo trì XPath?

Gỡ lỗi từng bước một. Bắt đầu với một khối ổn định, kiểm tra các nút được trả về, và chỉ thêm trục hoặc điều kiện tiếp theo sau khi kết quả hiện tại là đúng. Kiểm tra các đường dẫn tương đối từ cùng một nút ngữ cảnh mà mã sản xuất sẽ sử dụng.

Lưu trữ các tài liệu đại diện cho các trang danh sách, chi tiết, trạng thái trống, biến thể địa phương hóa và các mô-đun tùy chọn. Các khẳng định nên bao phủ các giá trị, số lượng nút và ranh giới bản ghi. Một đường dẫn vẫn trả về một chuỗi có thể sai nếu bây giờ nó trỏ đến một breadcrumb hoặc bản sao ẩn.

Phiên bản biểu thức với sơ đồ trích xuất và phân loại trang. Khi một nguồn giới thiệu một mẫu mới, hãy xác định nó một cách rõ ràng và đo lường sự hiện diện của nó. Điều này giữ cho việc bảo trì XPath có thể theo dõi và tránh việc vô tình thêm một nhánh khác vào một biểu thức mà hành vi của nó đã khó suy luận.

Kết luận

XPath là một ngôn ngữ truy vấn cây với hỗ trợ mạnh mẽ cho điều hướng, lọc và các giá trị tính toán. Nó phù hợp với các tác vụ trích xuất nơi mà điểm neo hữu ích và nút mong muốn có liên quan bởi cha, tổ tiên, anh chị em, thuộc tính hoặc điều kiện văn bản.

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 cộng, sau đó áp dụng mẫu khám phá 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

Liệu XPath có hoạt động với HTML không?

Có. Các API duyệt và tự động hóa có thể đánh giá XPath đối với các tài liệu HTML đã được phân tích, tùy thuộc vào phiên bản và tính năng XPath mà chúng triển khai.

Sự khác biệt giữa / và // trong XPath là gì?

Một dấu gạch chéo đơn tách biệt các bước con trực tiếp, trong khi một dấu gạch chéo đôi tìm kiếm các hậu duệ từ điểm hiện tại.

Liệu XPath có thể chọn thuộc tính không?

Có. Trục thuộc tính sử dụng tiền tố @, như trong //a/@href cho các thuộc tính href trên các phần tử liên kết.

Tại sao nên giới hạn các tìm kiếm rộng //?

Một ngữ cảnh nhỏ hơn giảm thiểu việc đi lại không cần thiết và làm cho ranh giới bản ghi mong muốn trong biểu thức rõ ràng hơn.

Tài liệu tham khảo