Tôi đã sử dụng Trình phân tích cú pháp HTML để loại bỏ dữ liệu khỏi các trang web và loại bỏ mã html khi làm như vậy. Tôi biết các mô-đun khác nhau như Beautiful Soup, nhưng quyết định đi theo con đường không phụ thuộc vào mô-đun "bên ngoài". Có một mã được cung cấp bởi Eloff: Strip HTML from strings in PythonSử dụng HTMLParser bằng Python 3.2
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
self.reset()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def strip_tags(html):
s = MLStripper()
s.feed(html)
return s.get_data()
Nó hoạt động trong Python 3.1. Tuy nhiên, gần đây tôi đã nâng cấp lên Python 3.2.x và thấy rằng tôi gặp lỗi liên quan đến mã HTML Parser như được viết ở trên.
điểm lỗi đầu tiên của tôi vào dòng:
s.feed(html)
... và các lỗi nói ...
AttributeError: 'MLStripper' object has no attribute 'strict'
Vì vậy, sau một chút về nghiên cứu, tôi thêm "nghiêm ngặt = True "vào dòng trên cùng, làm cho nó ...
class MLStripper(HTMLParser, strict=True)
Tuy nhiên, tôi nhận được lỗi mới:
TypeError: type() takes 1 or 3 arguments
Để xem những gì sẽ xảy ra, tôi loại bỏ các "tự" tranh luận và để lại trong "nghiêm ngặt = True" ... mà đã từ bỏ các lỗi:
NameError: global name 'self' is not defined
... và tôi đã nhận cảm giác "Tôi đoán đoán".
Tôi không biết đối số thứ ba trong dòng class MLStripper(HTMLParser)
là sau self
và strict=True
; nghiên cứu không quăng bất kỳ chứng ngộ nào.
Điều đó hoạt động hoàn hảo, Thomas K. Cảm ơn bạn rất nhiều! Các tập lệnh đang hoạt động hoàn hảo một lần nữa với mã "super() .__ init __()" được chèn vào. – MilesNielsen
Điều này cũng giải quyết được đối tượng AttributeError: 'HTMLTagRemover' không có thuộc tính 'convert_charrefs' super() .__ init __() KHÔNG được yêu cầu trong Python2 cho tôi nhưng được viết bằng Python3 - cảm ơn –