2011-11-02 30 views
158

Có điều gì đó giống như của Ruby nokogiri trên nút jj không? Tôi có nghĩa là trình phân tích cú pháp HTML thân thiện với người dùng.Trình phân tích cú pháp HTML trên Node.js

Tôi đã xem trên trang mô-đun của 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

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

+0

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] (http://stackoverflow.com/a/31361044/778272). –

+1

Tại sao các bạn luôn đánh giá tất cả mọi thứ như là tắt chủ đề hoặc không thể chấp nhận hoặc bất cứ điều gì? Đây là một người thực sự với một câu hỏi hợp pháp. Bạn chỉ cần tiếp tục và đóng nó lại. Nó có khiến bạn cảm thấy quan trọng hay gì đó không? –

Trả lời

389

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ó cheerio, nó có giao diện jQuery và nhanh hơn rất nhiều so với phiên bản cũ hơn của jsdom, mặc dù những ngày này chúng tương tự về hiệu suất.

Bạn có thể muốn xem htmlparser2, là trình phân tích cú pháp truyền trực tuyến và theo chuẩn của nó, nó có vẻ nhanh hơn các trình duyệt 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 đi kèm 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 giống như một giải pháp tốt. Nó khá hoạt động (11 ngày kể từ lần commit cuối cùng của bản cập nhật này), tuân theo WHATWG và được sử dụng trong jsdom, AngularPolymer.

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

Nếu trang web bạn đang cố gắng xóa là dynamic thì bạn nên sử dụng headless browser như phantomjs. Ngoài ra, hãy xem casperjs nếu bạn đang xem xét các ảo ảnh. Và bạn có thể kiểm soát casperjs từ nút với SpookyJS.

Bên cạnh các ảo ảnh có zombiejs. Không giống như các phantomjs không thể được nhúng trong nodej, zombiej chỉ là một mô-đun nút.

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

+12

Câu trả lời rất hoàn chỉnh. Công việc tốt. –

+1

Bạn có thể lấy 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. – esp

+0

@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. –

17

Cập nhật:cheerio có lẽ là lựa chọn tốt nhất của bạn.

Node.io là một công cụ cạo khá toàn diện.

+4

Node.io không còn được duy trì và tác giả của anh ta khuyên bạn nên sử dụng [cheerio] (https://github.com/MatthewMueller/cheerio) ngay bây giờ –

+0

Cảm ơn, cập nhật câu trả lời. – Will

Các vấn đề liên quan