2009-05-21 18 views
6

Tôi đang làm việc trên mã để phân tích cú pháp tệp cấu hình được viết bằng XML, trong đó các thẻ XML là trường hợp hỗn hợp và trường hợp là đáng kể. Beautiful Soup xuất hiện để chuyển đổi thẻ XML thành chữ thường theo mặc định và tôi muốn thay đổi hành vi này.Tôi có thể thay đổi hành vi của BeautifulSoup liên quan đến việc chuyển đổi các thẻ XML thành chữ thường không?

Tôi không phải là người đầu tiên đặt câu hỏi về chủ đề này [xem here]. Tuy nhiên, tôi không hiểu câu trả lời cho câu hỏi đó và trong BeautifulSoup-3.1.0.1 BeautifulSoup.py dường như không chứa bất kỳ trường hợp nào của "encodedName" hoặc "Tag.__str__"

Trả lời

3

Theo Leonard Richardson, người sáng tạo | người duy trì Súp đẹp, bạn can't.

+0

[beautifulsoup4] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser) sử dụng lxml để phân tích cú pháp xml. Nó có thể sử dụng html5lib để phân tích cú pháp html. Các trình phân tích cú pháp này nên giữ lại các thẻ. – jfs

0

chỉ cần sử dụng trình phân tích cú pháp xml propper thay vì thats lib thực hiện để đối phó với các tập tin bị hỏng

i sugest để chỉ có một cái nhìn tại xml.etree hoặc lxml

6
import html5lib 
from html5lib import treebuilders 

f = open("mydocument.html") 
parser = html5lib.XMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup")) 
document = parser.parse(f) 

'tài liệu' bây giờ là một cây BeautifulSoup giống như, nhưng vẫn giữ được các trường hợp của thẻ. Xem html5lib để biết tài liệu và cài đặt.

1

Tốt hơn hết là sử dụng lxml. Nó nhanh hơn rất nhiều so với BeautifulSoup. 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 Blicking agrees.

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.

Nó cũng phù hợp hơn cho XML.

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