2012-02-17 21 views

Trả lời

13

Trong libxml2 page bạn có thể nhìn thấy thông báo này:

Lưu ý rằng một số các purist Python không thích các thiết lập mặc định của bindings Python, chứ không phải phàn nàn Tôi đề nghị họ có một cái nhìn tại lxml bindings pythonic hơn cho libxml2 và libxslt và kiểm tra danh sách gửi thư.

và trong lxml trang khác này:

Bộ công cụ XML lxml là một Pythonic bắt buộc đối với các thư viện C libxml2 và libxslt. Nó là duy nhất ở chỗ nó kết hợp tốc độ và tính năng XML đầy đủ của các thư viện này với sự đơn giản của một API Python bản địa, chủ yếu là tương thích nhưng vượt trội so với API ElementTree nổi tiếng.

Vì vậy, về cơ bản, với lxml bạn nhận được chính xác chức năng tương tự, nhưng với aa API pythonic tương thích với ElementTree thư viện trong thư viện chuẩn (vì vậy điều này có nghĩa các tài liệu thư viện chuẩn sẽ hữu ích cho học cách sử dụng lxml). Đó là lý do tại sao, lxml được ưu tiên hơn libxml2 (ngay cả khi triển khai cơ bản giống nhau).

Chỉnh sửa: Có nói rằng, như các câu trả lời khác giải thích, để phân tích cú pháp định dạng html, tùy chọn tốt nhất của bạn là sử dụng BeautifulSoup. Một điều thú vị cần lưu ý là, nếu bạn đã cài đặt lxml, BeautifulSoup sẽ sử dụng nó như được giải thích trong documentation cho phiên bản mới:

Nếu bạn không chỉ định bất cứ điều gì, bạn sẽ nhận được các phân tích cú pháp HTML tốt nhất đã được cài đặt. Beautiful Soup xếp hạng trình phân tích cú pháp của lxml là tốt nhất, sau đó là html5lib’s, sau đó là trình phân tích cú pháp tích hợp của Python.

Dù sao, ngay cả khi sử dụng BeautifulSouplxml dưới mui xe, bạn sẽ có thể để phân tích gãy html rằng bạn không thể phân tích với xml trực tiếp.Ví dụ:

>>> lxml.etree.fromstring('<html>') 
... 
XMLSyntaxError: Premature end of data in tag html line 1, line 1, column 7 

Tuy nhiên:

>>> bs4.BeautifulSoup('<html>', 'lxml') 
<html></html> 

Cuối cùng, lưu ý rằng lxml cũng cung cấp một giao diện để phiên bản cũ của BeautifulSoup như sau:

>>> lxml.html.soupparser.fromstring('<html>') 
<Element html at 0x13bd230> 

Vì vậy, ở phần cuối của ngày, có thể bạn sẽ sử dụng lxmlBeautifulSoup. Điều duy nhất bạn phải chọn là API mà bạn thích nhất.

0

lxml là loại thường được khuyến nghị. Cụ thể, lxml.html (nếu tôi nhớ chính xác).

Tôi tin rằng nó làm cho việc sử dụng libxml2 dưới mui xe, nhưng giảm trở lại beautifulsoup nếu html là đặc biệt khó chịu, nhưng không dùng từ ngữ của tôi cho nó, hãy kiểm tra trang web! (http://http://lxml.de/)

1

BeautifulSoup là tốt để phân tích cú pháp html. Bạn có thể kiểm tra ví dụ của nó và thấy rằng nó tốt so với những người khác.

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