Bạn nên sử dụng lxml. Nó hoạt động với nhiều giá trị lớp được phân tách bằng dấu cách ('class1 class2').
Mặc dù tên của nó, lxml cũng là để phân tích cú pháp và cào HTML. Nó nhanh hơn rất nhiều so với BeautifulSoup và thậm chí còn xử lý HTML "bị hỏng" tốt hơn so với BeautifulSoup (yêu cầu của họ đối với danh tiếng). Nó cũng có API tương thích cho BeautifulSoup nếu bạn không muốn tìm hiểu API lxml.
Ian Bicking agrees và thích lxml trên BeautifulSoup.
Không có lý do gì để sử dụng BeautifulSoup nữa, trừ khi bạn đang sử dụng Google App Engine hoặc thứ gì đó không hoàn toàn là Python không được phép.
Bạn thậm chí có thể sử dụng bộ chọn CSS với lxml, vì vậy việc sử dụng dễ dàng hơn rất nhiều so với BeautifulSoup. Thử chơi với nó trong bảng điều khiển Python tương tác.
** Update **: Đây được cho là đã được cố định trong 4 beta 5: https://bugs.launchpad.net/beautifulsoup/+bug/410304 – endolith