HTML Токенізатор
HTML Токенізатор
Токенізатор є першим етапом парсингу HTML: він перетворює розмітковий текст у потік токенів, визначених стандартом. Він є публічним API, тому інструменти, які працюють з токенами, а не з деревами — лінтери, попередні проходи санітайзера, підсвічувачі синтаксису — можуть споживати потік безпосередньо.
Токенізація розмітки
Tokenizer.tokenize() обробляє повний вхід; Tokenizer.tokenize_fragment() застосовує правила токенізації фрагментів. Обидва генерують стандартний словник токенів.
Класи токенів
Кожен токен — це типізований об’єкт: StartTagToken і EndTagToken для тегів (з атрибутами), CharacterToken для тексту, CommentToken, DoctypeToken і EofToken позначають кінець вводу.
Стани токенізатора
TokenizerState моделює станову машину стандартів — ті самі стани, які названі в специфікації — і Tokenizer.set_state() дозволяє фрагментним та контекстно-чутливим викликачам почати у правильному стані.
Символьні посилання
Іменовані та числові символьні посилання розв’язуються через resolve_named_char_ref(), resolve_numeric_char_ref() та find_named_char_ref_match() — повну таблицю іменованих посилань, а не скорочений піднабір.
Поради та найкращі практики
- Використовуйте
tokenize_fragment()з правильним початковим станом під час токенізації вмісту, який може з’явитися всередині конкретного елемента - Ставте
EofTokenяк остаточний сигнал завершення, а не вичерпуйте ітератор за допомогою виключення - Для санітайзерів перевіряйте атрибути
StartTagTokenна рівні токену перед побудовою будь-якого дерева
Типові проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
| Вміст скрипту/стилю токенізується як розмітка | Неправильний початковий стан для контексту | Встановіть відповідний TokenizerState за допомогою set_state() |
| Сутності залишаються нерозв’язаними | Споживання необробленого тексту без розв’язання посилань | Використовуйте функції розв’язання char-ref |
| Вивід фрагмента відрізняється від повного розбору | Правила фрагмента навмисно відрізняються | Використовуйте tokenize() для повних документів |
FAQ
Чи можу я використовувати токенізатор без побудови дерева?
Так — потік токенів є публічним, автономним виводом.
Чи є стани токенізатора стандартними?
TokenizerState відображає машину станів специфікації і може бути встановлений через set_state().
Як обробляються іменовані посилання на символи?
Через resolve_named_char_ref() і find_named_char_ref_match() з використанням повної таблиці іменованих посилань.
API Reference Підсумок
| Клас/Метод | Опис |
|---|---|
Tokenizer.tokenize | Токенізуйте повний ввід |
Tokenizer.tokenize_fragment | Токенізуйте за правилами фрагмента |
Tokenizer.set_state | Встановити початковий стан токенізатора |
StartTagToken | Токен початкового тегу з атрибутами |
TokenizerState | Стани машини станів стандартів |
resolve_named_char_ref | Розв’язати іменоване посилання на символ |