Trong .Net, tôi đã tìm thấy thư viện tuyệt vời này, HtmlAgilityPack cho phép bạn dễ dàng phân tích cú pháp HTML không được định dạng bằng XPath. Tôi đã sử dụng điều này trong một vài năm trong các trang web .Net của tôi, nhưng tôi đã phải giải quyết cho các thư viện đau đớn hơn cho Python, Ruby và các dự án khác. Có ai biết về các thư viện tương tự cho các ngôn ngữ khác không?Phân tích HTML qua XPath
Trả lời
Trong python, ElementTidy phân tích súp thẻ và tạo ra một cây yếu tố, cho phép truy vấn sử dụng XPath:
>>> from elementtidy.TidyHTMLTreeBuilder import TidyHTMLTreeBuilder as TB
>>> tb = TB()
>>> tb.feed("<p>Hello world")
>>> e= tb.close()
>>> e.find(".//{http://www.w3.org/1999/xhtml}p")
<Element {http://www.w3.org/1999/xhtml}p at 264eb8>
BeautifulSoup là thư viện Python tốt để xử lý HTML lộn xộn theo những cách rõ ràng.
BeautifulSoup không sử dụng xpath :) – dzen
Dường như câu hỏi có thể được tuyên bố chính xác hơn là "Cách chuyển đổi HTML sang XML để biểu thức XPath có thể được đánh giá dựa trên nó".
Dưới đây là hai công cụ tốt:
TagSoup, một chương trình mã nguồn mở, là một Java và SAX - công cụ dựa, được phát triển bởi John Cowan. Đây là trình phân tích cú pháp tuân thủ SAX được viết bằng Java, thay vì phân tích cú pháp XML được định dạng hoặc hợp lệ, phân tích HTML như được tìm thấy trong tự nhiên: nghèo, khó chịu và thô lỗ, mặc dù khá ngắn. TagSoup được thiết kế cho những người phải xử lý nội dung này bằng cách sử dụng một số khía cạnh của một thiết kế ứng dụng hợp lý. Bằng cách cung cấp một giao diện SAX, nó cho phép các công cụ XML tiêu chuẩn được áp dụng cho ngay cả HTML tồi tệ nhất. TagSoup cũng bao gồm một bộ xử lý dòng lệnh đọc các tệp HTML và có thể tạo ra HTML thuần hoặc XML được định dạng tốt, gần đúng với XHTML.
Taggle là một cổng C++ thương mại của TagSoup.SgmlReader là công cụ được phát triển bởi Microsoft Chris Lovett.
SgmlReader là một API XmlReader trên bất kỳ tài liệu SGML nào (bao gồm cả hỗ trợ HTML). Một tiện ích dòng lệnh cũng được cung cấp để xuất kết quả XML được định dạng tốt.
Tải file zip bao gồm thực thi độc lập và toàn bộ mã nguồn: SgmlReader.zip
Một thành tích xuất sắc được the pure XSLT 2.0 Parser of HTML được viết bởi David Carlisle.
Đọc mã của nó sẽ là một bài tập học tập tuyệt vời cho tất cả mọi người trong chúng ta.
Từ mô tả:
"d: htmlparse (string)
d: htmlparse (string, namespace, html-mode)
Một hình thức lập luận tương đương với)
d: htmlparse (string, 'http://ww.w3.org/1999/xhtml', true()))
phân tích các chuỗi dưới dạng HTML và/hoặc XML sử dụng một số công nghệ tự động sẵn có để)
kiểm soát việc mở và đóng phần tử ngụ ý.
Nó không có đủ kiến thức về HTML DTD nhưng lai có danh sách đầy đủ của
phần tử rỗng và danh sách đầy đủ các định nghĩa thực thể.Các thực thể HTML, và
tham chiếu ký tự thập phân và thập lục phân đều được chấp nhận. Lưu ý html-entity
được nhận diện ngay cả khi html-mode = false().
tên phần tử được lowercased (nếu html-mode là đúng()) và đặt vào không gian tên
định bởi tham số không gian tên (có thể là "" để biểu thị
không gian tên trừ khi đầu vào đã explict tờ khai gian tên, trong
trường hợp này sẽ được tôn trọng.
tên thuộc tính được lowercased nếu html-mode = true() "
Đọc mô tả chi tiết hơn here.
Hy vọng điều này sẽ hữu ích.
Chúc mừng,
Dimitre Novatchev.
Đối với Ruby, tôi đánh giá cao đề nghị Hpricot mà Jb Evain đã chỉ ra. Nếu bạn đang tìm kiếm một đối thủ cạnh tranh dựa trên libxml nhanh hơn, Nokogiri (xem http://tenderlovemaking.com/2008/10/30/nokogiri-is-released/) cũng khá tốt (nó hỗ trợ cả tìm kiếm XPath và CSS như Hpricot nhưng nhanh hơn). Có một số cơ bản wiki và một số benchmarks.
Tôi rất muốn khuyên [Nokogiri] (http: // nokogiri. org) những ngày này. Đó là tất cả mọi thứ Hpricot đã và nhiều hơn nữa. –
Có một triển khai C miễn phí cho XML được gọi là libxml2 có một số bit api cho XPath mà tôi đã sử dụng với thành công lớn mà bạn có thể chỉ định HTML là tài liệu đang được tải. Điều này đã làm việc cho tôi đối với một số tài liệu HTML hoàn hảo hơn ..
Đối với hầu hết các phần, XPath hữu ích nhất khi HTML vào được mã hóa chính xác và có thể đọc 'như tài liệu xml'. Bạn có thể muốn xem xét sử dụng một tiện ích dành riêng cho mục đích này để làm sạch tài liệu HTML. Dưới đây là một ví dụ: http://tidy.sourceforge.net/
Theo như các công cụ XPath này, bạn có thể thấy rằng hầu hết các triển khai thực sự dựa trên các thư viện C hoặc C++ đã có từ trước như libxml2.
Tôi ngạc nhiên không có một đề cập duy nhất của lxml. Nó rất nhanh và sẽ hoạt động trong bất kỳ môi trường nào cho phép thư viện CPython.
Đây là cách you can parse HTML via XPATH using lxml.
>>> from lxml import etree
>>> doc = '<foo><bar></bar></foo>'
>>> tree = etree.HTML(doc)
>>> r = tree.xpath('/foo/bar')
>>> len(r)
1
>>> r[0].tag
'bar'
>>> r = tree.xpath('bar')
>>> r[0].tag
'bar'
Chết tiệt, đây là một câu hỏi cũ: -/ –
Không có nghĩa là bạn có thể trả lời câu hỏi đó. Lý tưởng nhất, câu trả lời tốt nhất bong bóng lên ngay cả sau một thời gian rất dài. Nhân tiện, câu trả lời của bạn chỉ phân tích cú pháp XML chứ không phải HTML. Bạn nên bao gồm một cá thể 'HTMLParser'. – phihag
phihag: Đã sửa lỗi. Làm việc với HTML quá bây giờ, miễn là doc chứa văn bản chúng tôi muốn phân tích cú pháp. –
Kết quả ổn định nhất mà tôi đã sử dụng lxml.html của soupparser. Bạn sẽ cần phải cài đặt python-lxml và python-BeautifulSoup, sau đó bạn có thể làm như sau:
- 1. python, lxml và xpath - html bảng phân tích cú pháp
- 2. Biểu thức XPath phân tích
- 3. Không thể phân tích cú pháp html sử dụng lxml XPath phân tích cú pháp
- 4. libxml2 Phân tích cú pháp HTML
- 5. XPath để phân tích cú pháp "SRC" từ thẻ IMG?
- 6. Phân tích cú pháp XPath hoặc CSS nhanh hơn (đối với Nokogiri trên các tệp HTML)?
- 7. XPath để định vị ô có phân tích cú pháp văn bản HTML bảng
- 8. Phân tích cú pháp HTML HTML
- 9. Làm cách nào để phân tích cú pháp HTML bằng html5lib và truy vấn HTML được phân tích cú pháp bằng XPath?
- 10. Phân tích html với trình phân tích cú pháp SAX
- 11. Phân tích cú pháp HTML trong perl
- 12. Thẻ phân tích cú pháp XPath bằng dấu nháy đơn
- 13. Sử dụng XPath để phân tích một tài liệu XML
- 14. Perl, cách phân tích cú pháp tệp XML, xpath
- 15. Phân tích cú pháp XML của jQuery và XPath
- 16. Phân tích HTML trong mục tiêu C
- 17. HTML Agility pack - các bảng phân tích cú pháp
- 18. Trình phân tích cú pháp HTML
- 19. Phân tích chuỗi HTML bằng Ajax/jQuery
- 20. BeautifulSoup HTML bảng phân tích cú pháp
- 21. Phân tích cú pháp HTML với Erlang
- 22. Lỗi phân tích cú pháp HTML
- 23. HTML Agility Pack: phân tích thẻ href
- 24. html em phân tích lỗi trong chrome
- 25. PHP tags phân tích cú pháp HTML
- 26. RUBY Nokogiri HTML HTML Phân tích cú pháp
- 27. Trình phân tích cú pháp HTML python HTML nhanh
- 28. Phân tích cú pháp thẻ html bằng Python
- 29. Phân tích cú pháp HTML từ một trang web
- 30. Phân tích cú pháp HTML giống như jquery bằng Python?
Bạn có thể muốn xem xét lxml cho Python bây giờ –
** Nguy hiểm!** Sử dụng trình phân tích cú pháp BeautifulSoup cho lxml thay vì elementtidy sẽ sặc trên các không gian tên không được khai báo. Tôi đã học thật chăm chỉ! –