2010-06-17 26 views

Trả lời

3

Tôi nghĩ nên viết lại câu trả lời của mình.

Các dịch vụ mát-xa được tích hợp sẵn có tác dụng làm hư hại ánh sáng (khoảng trống thừa, không có dấu gạch chéo, v.v ...). Tôi chắc chắn sẽ cố gắng và tránh xa những điều này trước khi tham gia nhiều hơn nữa.

Bạn có thể pass in your own massages và tôi sẽ đề nghị bạn mở rộng các thiết lập mặc định:

import copy, re 

myMassage = [(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))] 
myNewMassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE) 
myNewMassage.extend(myMassage) 

BeautifulSoup(badString, markupMassage=myNewMassage) 
# Foo<!--This comment is malformed.-->Bar<br />Baz 

Bạn đang có lẽ tốt hơn hết làm nó theo cách này vì nó tất cả đi vào một nồi phân tích cú pháp, đạt BeautifulSoups optimisations ... Mặc dù hiệu năng thời gian chạy có lẽ khá giống nhau.

2

Từ the documentation, phương pháp xoa bóp chỉ là cặp (regular expression, replacement function) vì vậy tôi không nghĩ rằng đó thực sự là trường hợp sử dụng xoa bóp hoặc regexps.

ví dụ: để dọn dẹp comments bị thay đổi:

(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1)) 

Nếu bạn nhìn vào nguồn gốc của phương pháp trong BeautifulSoup.py bạn sẽ thấy rằng đây là chỉ cần chạy theo thứ tự so với đánh dấu:

for fix, m in self.markupMassage: 
    markup = fix.sub(m, markup) 

Vì vậy, trong khi bạn có thể làm một số xử lý regexp của riêng bạn trước khi BeautifulSoup được nhìn thấy đánh dấu bạn có lẽ tốt hơn kết hợp bất kỳ dọn dẹp bổ sung cần thiết với xây dựng mặc định MARKUP_MASSAGE như được hiển thị trong câu trả lời Oli's.