Có thể xóa các thẻ script và tất cả nội dung của chúng khỏi HTML bằng BeautifulSoup hay tôi phải sử dụng Biểu thức chính quy hay thứ gì khác không?
Câu trả lời:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>> s.extract()
>>> soup
baba
[s.extract() for s in soup(['iframe', 'script'])]
Lưu ý rằng để sử dụng nhiều thẻ, tham số phải được một danh sách
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
:? Nó giống nhau không?
<html><head></head><body><p>baba</p></body></html>
Câu trả lời cập nhật cho những người có thể cần tham khảo trong tương lai: Câu trả lời chính xác là.
decompose()
Bạn có thể sử dụng nhiều cách khác nhau nhưng hiệu decompose
quả tại chỗ.
Ví dụ sử dụng:
soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>')
soup.i.decompose()
print str(soup)
#prints '<p>This is a slimy text and</p>'
Khá hữu ích để loại bỏ các mảnh vụn như 'script', 'img', v.v.
decompose
và extract
là cái sau trả lại thứ đã bị xóa, trong khi cái trước chỉ phá hủy nó. Vì vậy, đây là câu trả lời chính xác hơn cho câu hỏi, nhưng các phương pháp khác vẫn hoạt động.
remove
nội dung. Thường được sử dụng để làm sạch HTML của các thẻ và định dạng không cần thiết.
Như đã nêu trong ( tài liệu chính thức ), bạn có thể sử dụng extract
phương pháp để xóa tất cả cây con phù hợp với tìm kiếm.
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]