HTML Parser nào là tốt nhất? [đóng cửa]


194

Tôi mã rất nhiều trình phân tích cú pháp. Cho đến bây giờ, tôi đã sử dụng trình duyệt không đầu HtmlUnit để phân tích cú pháp và tự động hóa trình duyệt.

Bây giờ, tôi muốn tách cả hai nhiệm vụ.

Vì 80% công việc của tôi chỉ liên quan đến phân tích cú pháp, tôi muốn sử dụng trình phân tích cú pháp HTML nhẹ vì phải mất nhiều thời gian trong HtmlUnit để tải trang trước, sau đó lấy nguồn và sau đó phân tích cú pháp.

Tôi muốn biết trình phân tích cú pháp HTML nào là tốt nhất. Trình phân tích cú pháp sẽ tốt hơn nếu nó gần với trình phân tích cú pháp HtmlUnit.


BIÊN TẬP:

Tốt nhất, tôi muốn ít nhất các tính năng sau:

  1. Tốc độ
  2. Dễ dàng xác định vị trí bất kỳ HtmlE bổ sung bằng "id" hoặc "tên" hoặc "loại thẻ" của nó.

Nó sẽ ổn với tôi nếu nó không làm sạch mã HTML bẩn. Tôi không cần phải xóa bất kỳ nguồn HTML nào. Tôi chỉ cần một cách dễ nhất để di chuyển qua HtmlElements và thu thập dữ liệu từ chúng.


2
Làm thế nào để bạn có nghĩa là "tốt nhất"? Bạn có nghĩa là tốc độ, dễ dàng chuyển đổi từ việc thực hiện hiện tại, tuân thủ các tiêu chuẩn W3C, điều gì khác mà tôi chưa từng nghĩ đến? Câu hỏi của bạn ngụ ý tốc độ, nhưng nó cũng ngụ ý thời gian chuyển tiếp phát triển. Một số làm rõ có thể giúp những người khác trong việc đề xuất các trình phân tích cú pháp tốt sẽ phù hợp với nhu cầu của bạn tốt hơn.
khai vị

2
Câu nói của bạn 'Tôi viết mã rất nhiều trình phân tích cú pháp' dường như không liên quan đến câu hỏi. Ý bạn là 'Tôi cần sử dụng trình phân tích cú pháp html rất nhiều?'
trống

11
Tôi nghĩ rằng câu hỏi này đủ cụ thể để được miễn trừ khỏi lý do gần gũi "không mang tính xây dựng".
Bill Lizard

9
Bình chọn để mở lại này xin vui lòng. Điều này là đủ cụ thể và không nên được đóng lại.
AZ_

3
Vâng, một số người trên SO chiến đấu với một cuộc chiến thần thánh chống lại các cuộc chiến tranh "câu hỏi hay nhất". Rất khó chịu. Câu trả lời bỏ phiếu rõ ràng cho thấy sự hữu ích của câu hỏi này.
dùng1050755

Câu trả lời:


396

Tự cắm: Tôi vừa phát hành một trình phân tích cú pháp Java HTML mới: jsoup . Tôi đề cập đến nó ở đây bởi vì tôi nghĩ rằng nó sẽ làm những gì bạn đang theo đuổi.

Thủ thuật nhóm của nó là cú pháp chọn CSS để tìm các phần tử, ví dụ:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Xem javector Selector để biết thêm thông tin.

Đây là một dự án mới, vì vậy bất kỳ ý tưởng để cải thiện đều rất đáng hoan nghênh!


15
Điều này thật tuyệt vời và tôi thích sự hỗ trợ của bộ chọn CSS. Tôi hầu như không biết tôi đang sử dụng một thư viện Java. :-)
William Pietri

17
Xin đừng ngừng ủng hộ điều này. Đây chính xác là những gì chúng tôi cần để phân tích HTML bằng cách sử dụng Java phía máy chủ! Điều này thật tuyệt! Tôi đã xây dựng một proxy chỉ trong vài giờ để sửa đổi tất cả các liên kết src và href để làm cho chúng đầy đủ đường dẫn đến máy chủ gốc.
jmort253

7
Tôi vừa lướt qua nó. Tôi thích giao diện và tài liệu của nó. Thật dễ hiểu. :)
emeraldhieu

5
Công việc tốt! Có jsoup và chạy trong ít hơn 10 phút.
Indrek Kõue

10
Không thể tin được, đây là bệnh quá. Tôi đã có thể xử lý một trang HTML trong vòng vài phút. CẢM ƠN BẠN RẤT NHIỀU CHO CÔNG VIỆC TUYỆT VỜI NÀY.
Michael-O

32

Thứ tốt nhất tôi từng thấy cho đến nay là HtmlCleaner :

HtmlCleaner là trình phân tích cú pháp HTML mã nguồn mở được viết bằng Java. HTML được tìm thấy trên Web thường bẩn, không đúng định dạng và không phù hợp để xử lý thêm. Đối với bất kỳ sự tiêu thụ nghiêm trọng nào của các tài liệu đó, trước tiên cần phải dọn dẹp mớ hỗn độn và đưa thứ tự vào các thẻ, thuộc tính và văn bản thông thường. Đối với tài liệu HTML đã cho, HtmlCleaner sắp xếp lại các phần tử riêng lẻ và tạo XML được định dạng tốt. Theo mặc định, nó tuân theo các quy tắc tương tự mà hầu hết các trình duyệt web sử dụng để tạo Mô hình Đối tượng Tài liệu. Tuy nhiên, người dùng có thể cung cấp thẻ tùy chỉnh và quy tắc được đặt để lọc và cân bằng thẻ.

Với HtmlCleaner, bạn có thể định vị bất kỳ phần tử nào bằng XPath.

Đối với các trình phân tích cú pháp html khác, hãy xem câu hỏi SO này .


1
Bạn phải tự xử lý proxy, sau đó sử dụng HtmlCleaner để xử lý luồng của bạn. => Nó không thuận tiện. T__T
kidnan1991

HTMLTidy sẽ không phải là một lựa chọn tốt hơn ở đây? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use- Điều này không thuyết phục lắm
pguardiario

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.