2011-09-19 53 views
6

Làm cách nào để xóa các thuộc tính nhất định như id, kiểu, lớp, v.v ... khỏi mã HTML?xóa các thuộc tính nhất định khỏi các thẻ HTML

Tôi nghĩ rằng tôi có thể sử dụng lxml.html.clean module, nhưng khi nó bật ra tôi chỉ có thể loại bỏ các thuộc tính phong cách với Clean(style=True).clean_html(code). Tôi không muốn sử dụng các biểu thức chính quy cho nhiệm vụ này (các thuộc tính có thể thay đổi).

Những gì tôi muốn có:

from lxml.html.clean import Cleaner 

code = '<tr id="ctl00_Content_AdManagementPreview_DetailView_divNova" class="Extended" style="display: none;">' 

cleaner = Cleaner(style=True, id=True, class=True) 
cleaned = cleaner.clean_html(code) 

print cleaned 
'<tr>' 

Cảm ơn trước!

Trả lời

10

cleaner.Cleaner.__call__ có thông số safe_attrs_only. Khi được đặt thành True, chỉ các thuộc tính trong clean.defs.safe_attrs mới được giữ nguyên. Bạn có thể xóa bất kỳ hoặc tất cả các thuộc tính bằng cách thay đổi clean.defs.safe_attrs. Chỉ cần chắc chắn để thay đổi nó trở lại khi bạn đã làm xong.

import lxml.html.clean as clean 

code = '<tr id="ctl00_Content_AdManagementPreview_DetailView_divNova" class="Extended" style="display: none;">' 

safe_attrs = clean.defs.safe_attrs 
cleaner = clean.Cleaner(safe_attrs_only=True, safe_attrs=frozenset()) 
cleansed = cleaner.clean_html(code) 

print(cleansed) 

sản lượng

<tr></tr> 
+0

Cảm ơn, đó chính xác là những gì tôi cần! – naeg

+0

Tôi gặp sự cố khi sử dụng kỹ thuật này để làm việc trong lxml-3.2.3. Xảy ra để biết nếu họ thay đổi một cái gì đó? – Xavi

+0

Để làm cho nó hoạt động trong v3.2.3 tôi phải thêm 'clean.safe_attrs = clean.defs.safe_attrs' sau' cleaner = clean.Cleaner (...) '. – Xavi

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