Trình phân tích cú pháp HTML trên Node.js [đã đóng]


198

Có cái gì đó giống như Ruby's nokogiri trên nodejs không? Tôi có nghĩa là một trình phân tích cú pháp HTML thân thiện với người dùng.

Tôi đã thấy trên trang mô-đun Node.js một số trình phân tích cú pháp, nhưng tôi không thể tìm thấy thứ gì đó đẹp và mới mẻ.


3
Bạn có ý nghĩa gì bởi "thân thiện"? Thuận tiện để làm việc và chọn các nút có, như hỗ trợ bộ chọn XPath và CSS của Nokogiri? Có thể phân tích cú pháp HTML "thẻ súp" không hợp lệ?
Phrogz

Nếu bạn cảm thấy thoải mái với jQuery, hãy xem xét câu trả lời này .
Lucio Paiva

Câu trả lời:


446

Nếu bạn muốn xây dựng DOM, bạn có thể sử dụng jsdom .

Ngoài ra còn có từ biệt , nó có jQuery giao diện và nó nhanh hơn rất nhiều so với phiên bản cũ của jsdom, mặc dù những ngày này họ cũng tương tự như trong hoạt động.

Bạn có thể muốn xem htmlparser2 , đây là một trình phân tích cú pháp phát trực tuyến và theo tiêu chuẩn của nó, nó dường như nhanh hơn các phần mềm khác và không có DOM theo mặc định. Nó cũng có thể tạo ra một DOM, vì nó cũng được đóng gói với một trình xử lý tạo ra một DOM. Đây là trình phân tích cú pháp được sử dụng bởi cổ vũ.

parse5 cũng có vẻ là một giải pháp tốt. Nó khá hoạt động (11 ngày kể từ lần cam kết cuối cùng kể từ bản cập nhật này), tuân thủ WHATWG và được sử dụng trong jsdom , AngularPolyme .

Và nếu bạn muốn phân tích HTML để quét web , bạn có thể sử dụng YQL 1 . Có một mô-đun nút cho nó. YQL Tôi nghĩ sẽ là giải pháp tốt nhất nếu HTML của bạn đến từ một trang web tĩnh , vì bạn đang dựa vào một dịch vụ, không phải mã riêng và khả năng xử lý của bạn. Mặc dù lưu ý rằng nó sẽ không hoạt động nếu trang không được robot.txt của trang web không cho phép, YQL sẽ không hoạt động với nó.

Nếu trang web bạn đang cố gắng cạo là động thì bạn nên sử dụng trình duyệt không đầu như ph Phantomjs . Ngoài ra, hãy xem casperjs , nếu bạn đang xem xét ph Phantomjs. Và bạn có thể điều khiển casperjs từ nút bằng SpookyJS .

Bên cạnh ph Phantomjs còn có zombiejs . Không giống như ph Phantomjs không thể được nhúng trong nodejs, zombiejs chỉ là một mô-đun nút.

Có một nettuts + toturial cho các giải pháp sau.


1 Kể từ tháng 8 năm 2014, thư viện YUI, một yêu cầu cho YQL, không còn được duy trì tích cực, nguồn


1
Bạn có thể nhận DOM từ htmlparser2 bằng mô-đun DomHandler (đi kèm với htmlparser2). Chúng được phân tách nhằm mục đích cho phép các loại xử lý HTML khác mà không cần tạo DOM.
đặc biệt

@esp Cảm ơn, Trước khi tôi nghĩ đó là DOM không chuẩn, tôi đã thay đổi phần đó cho phù hợp.
Farid Nouri Neshat

Tôi không chắc chắn cách bạn YQL để thu thập thông tin - sẽ tốt hơn khi tham gia kết quả dịch vụ web không xử lý đánh dấu.
dardenfall

@dardenfall Bạn nói đúng, bò không phải là thuật ngữ đúng. Tôi đã thay đổi nó bằng cách cạo :)
Farid Nouri Neshat

@Farid - (tôi sẽ nhắn tin cho bạn nếu tôi có thể) có nguy cơ tranh luận trong các bình luận (xin lỗi!) Tôi vẫn không thấy cách bạn sử dụng nó để cạo. Nó hoạt động với các dịch vụ web không phải là trang web và với wservice, bạn hiếm khi phân tích cú pháp html. Có thể xml, nhưng không phải html.
dardenfall


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.