2013-04-09 31 views
5

Tôi đã đọc nhiều q & về cách xóa tất cả mã html khỏi chuỗi bằng python nhưng không có mã nào đáp ứng được. Tôi cần một cách để loại bỏ tất cả các thẻ, bảo tồn/chuyển đổi các thực thể html và làm việc tốt với các chuỗi utf-8.Xóa hoàn toàn tất cả mã html khỏi một chuỗi trong python

Rõ ràng BeautifulSoup là dễ bị tổn thương đối với một số chuỗi html đặc biệt crafted, tôi đã xây dựng một phân tích cú pháp đơn giản với HTMLParser để có được chỉ là văn bản nhưng tôi đã thua các đối tượng

from HTMLParser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def __init__(self): 
     HTMLParser.__init__(self) 
     self.data = [] 

    def handle_data(self, data): 
     self.data.append(data) 

    def handle_charref(self, name): 
     self.data.append(name) 

    def handle_entityref(self, ent): 
     self.data.append(ent) 

mang lại cho tôi một cái gì đó giống như

[u'Asia, sp ', u'cialiste du voyage', ...

mất đối tượng cho dấu "e" có dấu trong spécialiste.

Sử dụng một trong nhiều regexp bạn có thể tìm thấy làm câu trả lời cho các câu hỏi tương tự, nó sẽ luôn có một số trường hợp cạnh không được xem xét.

Có mô-đun thực sự tốt nào tôi có thể sử dụng không?

Trả lời

4

bleach tuyệt vời cho tác vụ này. Nó làm mọi thứ bạn cần. Nó có một bộ thử nghiệm mở rộng để kiểm tra các trường hợp cạnh lạ, nơi thẻ có thể trượt qua. Tôi chưa bao giờ gặp vấn đề với nó.

+0

bleach.clean (' không được phép', dải = True) này có thể là chính xác những gì tôi cần, tôi sẽ làm một số xét nghiệm với utf-8, các thực thể html và rằng thứ tối nay và sau đó cho bạn biết, cảm ơn –

+0

Thuốc tẩy không được chuyển đổi các thực thể HTML sang đối tác UTF-8 thực sự của chúng. Nếu không, hãy thử câu hỏi này: http://stackoverflow.com/questions/57708/convert-xml-html-entities-into-unicode-string-in-python –

1

có thể là pyquery? thử dùng lệnh easy_install/pip install pyquery; sau đó một số mã như:

from pyquery import PyQuery as jQ 

dom = jQ("<html>...</html>") 
print dom("body").text() 
Các vấn đề liên quan