HtmlParser

class selectolax.parser.HTMLParser( html, detect_encoding=True, use_meta_tags=True, decode_errors=u'ignore' )

Документ HTML.

Класс используется для парсинга исходного HTML-кода.

Параметры:
html : str (unicode) or bytes (строки или байты)
detect_encoding : bool, по умолчанию True

Если True и тип html bytes, то кодировка будет определена автоматически.

use_meta_tags : bool, по умолчанию True

Использовать ли метатег для опредения кодировки.

decode_errors : str, по умолчанию ‘ignore’

Тоже самое, что и встроенный метод str.decode: ‘strict’, ‘ignore’ или ‘replace’.

body

Возвращает тело документа body.

css(self, unicode query)

CSS селекторы.

Сопоставляет шаблон запроса с HTML-кодом. Виды CSS селекторов.

Параметры:
query : str

CSS селектор (например "div > :nth-child(2n+1):not(:has(a))").

Результат:
selector : Список list или Node узел
css_first(self, unicode query, default=None, strict=False)

Тоже самое, что и css, но возвращает только первое совпадение.

Параметры:
query : str
default : bool, по умолчанию None

Значение по умолчанию, если совпадений не найдено.

strict : bool, по умолчанию True

True, если требуется строго только одно совпадение в документе.

Результат:
selector : Node узел
html

Возвращает HTML-код страницы.

input_encoding

Возвращает кодировку HTML-документа.

root

Возвращает корень документа (root node).

strip_tags(self, list tags)

Удаляет указанные теги из узла.

Параметры:
tags : list

Список тегов для удаления.

Пример:

>>> tree = HTMLParser('<html><head></head><body><script></script><div>Hello world!</div></body></html>')
>>> tags = ['head', 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes']
>>> tree.strip_tags(tags)
>>> tree.html
'<html><body><div>Hello world!</div></body></html>'
tags(self, unicode name)

Возвращает список тегов одного вида

Параметры:
name : str (например, 'div')
text(self, bool deep=True, unicode separator="", bool strip=False)

Возвращает текст узла, включая текст всех его дочерних узлов.

Параметры:
strip : bool, по умолчанию False
separator : str, по умолчанию ""

Разделитель, используемый при соединении текста из разных узлов.

deep : bool, по умолчанию True

Если True, то включает текст из всех дочерних узлов.

Результат:
text : str
unwrap_tags(self, list tags)

Удаляет теги, но оставляет содержимое.

Работает также, как метод unwrap, но может использовать список тегов.

Параметры:
tags : list

Список тегов, которые требуется удалить.

Пример:

>>> tree = HTMLParser("<div><a href="">Hello</a> <i>world</i>!</div>")
>>> tree.body.unwrap_tags(['i','a'])
>>> tree.body.html
'<body><div>Hello world!</div></body>'

Node

class selectolax.parser.Node

HTML-элемент.

attributes

Все атрибуты текущего узла.

Значения пустых атрибутов равно None.

Результат:
attributes : словарь из атрибутов.

Пример:

>>> tree = HTMLParser("<div data id='my_id'></div>")
>>> node = tree.css_first('div')
>>> node.attributes
{'data': None, 'id': 'my_id'}
attrs

Объект типа dict, похожий на свойство attributes, но работающий непосредственно с данными узла.

Внимание

Если вы не планируете изменять атрибуты узлов, используйте attributes.

Результат:
attributes : Значения атрибута

Пример:

>>> tree = HTMLParser("<div id='a'></div>")
>>> node = tree.css_first('div')
>>> node.attrs
<div attributes, 1 items>
>>> node.attrs['id']
'a'
>>> node.attrs['foo'] = 'bar'
>>> del node.attrs['id']
>>> node.attributes
{'foo': 'bar'}
>>> node.attrs['id'] = 'new_id'
>>> node.html
'<div foo="bar" id="new_id"></div>'
child

Дочерний узел.

css(self, unicode query)

Вычисляет CSS селекторы текущего узла и его дочерних узлов.

css_first(self, unicode query, default=None, bool strict=False)

Тоже самое, что и css, но возвращает только первое совпадение.

decompose(self, bool recursive=True)

Удаляет узел.

Параметры:
recursive : bool, по умолчанию True

Всякий раз, когда нужно удалить все его дочерние узлы

Пример:

>>> tree = HTMLParser(html)
>>> for tag in tree.css('script'):
>>>     tag.decompose()
html

Возвращает HTML-код узла.

Результат:
text : str
id

Возвращает значение атрибута id.

Возвращает None, если атрибут не установлен.

Результат:
text : str
insert_after(signatures, args, kwargs, defaults)

Добавляет узел после текущего узла.

Параметры:
value : str, bytes или Node

The text or Node instance to insert after the Node. When a text string is passed, it’s treated as text. All HTML tags will be escaped. Convert and pass the Node object when you want to work with HTML. Does not clone the Node object. All future changes to the passed Node object will also be taken into account.

Текст или экземпляр узла для вставки после узла. Когда передается текстовая строка, она рассматривается как текст. Все HTML-теги будут экранированы. Преобразуйте и передайте объект Node, когда вы хотите работать с HTML. Не клонирует объект узла. Все будущие изменения переданного объекта узла также будут приняты во внимание.

Примеры:

>>> tree = HTMLParser('<div>Get <img src="" alt="Laptop"></div>')
>>> img = tree.css_first('img')
>>> img.insert_after(img.attributes.get('alt', ''))
>>> tree.body.child.html
'<div>Get <img src="" alt="Laptop">Laptop</div>'
>>> html_parser = HTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
>>> html_parser2 = HTMLParser('<div>Test</div>')
>>> img_node = html_parser.css_first('img')
>>> img_node.insert_after(html_parser2.body.child)
<div>Get <span alt="Laptop"><img src="/jpg"><div>Test</div> <div></div></span></div>'
insert_before(signatures, args, kwargs, defaults)

Добавялет узел перед текущим узлом.

Параметры:
value : str, bytes или Node

The text or Node instance to insert before the Node. When a text string is passed, it’s treated as text. All HTML tags will be escaped. Convert and pass the Node object when you want to work with HTML. Does not clone the Node object. All future changes to the passed Node object will also be taken into account.

Текст или экземпляр узла, который нужно вставить перед узлом. Когда передается текстовая строка, она рассматривается как текст. Все HTML-теги будут экранированы. Преобразуйте и передайте объект Node, когда вы хотите работать с HTML. Не клонирует объект узла. Все будущие изменения переданного объекта узла также будут приняты во внимание.

Примеры:

>>> tree = HTMLParser('<div>Get <img src="" alt="Laptop"></div>')
>>> img = tree.css_first('img')
>>> img.insert_before(img.attributes.get('alt', ''))
>>> tree.body.child.html
'<div>Get Laptop<img src="" alt="Laptop"></div>'
>>> html_parser = HTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
>>> html_parser2 = HTMLParser('<div>Test</div>')
>>> img_node = html_parser.css_first('img')
>>> img_node.insert_before(html_parser2.body.child)
<div>Get <span alt="Laptop"><div>Test</div><img src="/jpg"> <div></div></span></div>'
iter(self, include_text=False)

Перебор узлов.

Параметры:
include_text : bool

Если True, то вклчает также текстовые узлы.

Yields:
Генератор:
node
last_child

Последний дочерний узел.

next

Следующий узел.

parent

Родительский узел.

prev

Предыдущий узел.

raw_value

Взвращает необработанное (оригинальное, сырое) значение HTML-узла.

Пока работает только с текстовыми узлами

Результат:
raw_value : bytes

Пример:

>>> html_parser = HTMLParser('<div>&#x3C;test&#x3E;</div>')
>>> selector = html_parser.css_first('div')
>>> selector.child.html
'&lt;test&gt;'
>>> selector.child.raw_value
b'&#x3C;test&#x3E;'
remove(self, bool recursive=True)

Тоже самое, что и метод decompose.

replace_with

Заменяет текущий узел указанным значением.

Параметры:
value : str, bytes или Node

The text or Node instance to replace the Node with. When a text string is passed, it’s treated as text. All HTML tags will be escaped. Convert and pass the Node object when you want to work with HTML. Does not clone the Node object. All future changes to the passed Node object will also be taken into account.

Текст или экземпляр узла, который нужно вставить перед узлом. Когда передается текстовая строка, она рассматривается как текст. Все HTML-теги будут экранированы. Преобразуйте и передайте объект Node, когда вы хотите работать с HTML. Не клонирует объект узла. Все будущие изменения переданного объекта узла также будут приняты во внимание.

Примеры:

>>> tree = HTMLParser('<div>Get <img src="" alt="Laptop"></div>')
>>> img = tree.css_first('img')
>>> img.replace_with(img.attributes.get('alt', ''))
>>> tree.body.child.html
'<div>Get Laptop</div>'
>>> html_parser = HTMLParser('<div>Get <span alt="Laptop"><img src="/jpg"> <div></div></span></div>')
>>> html_parser2 = HTMLParser('<div>Test</div>')
>>> img_node = html_parser.css_first('img')
>>> img_node.replace_with(html_parser2.body.child)
'<div>Get <span alt="Laptop"><div>Test</div> <div></div></span></div>'
strip_tags(self, list tags)

Удаляет HTML-теги.

Параметры:
tags : list

Список тегов для удаления.

Пример:

>>> tree = HTMLParser('<html><head></head><body><script></script><div>Hello world!</div></body></html>')
>>> tags = ['head', 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes']
>>> tree.strip_tags(tags)
>>> tree.html
'<html><body><div>Hello world!</div></body></html>'
tag

Возвращает имя текущего тега (например, div, p, img).

Результат:
text : str
text(self, bool deep=True, unicode separator=u'', bool strip=False)

Возвращает текст узла, включая текст всех его дочерних узлов.

Параметры:
strip : bool, по умолчанию False
separator : str, по умолчанию ""

Разделитель, используемый при соединении текста из разных узлов.

deep : bool, по умолчанию True

Если True, то включает текст из всех дочерних узлов.

Результат:
text : str
traverse(self, include_text=False)

Iterate over all child and next nodes starting from the current level.

Выполните итерацию по всем дочерним и следующим узлам, начиная с текущего уровня.

Параметры:
include_text : bool

Если True, то включает также текстовые узлы.

Yields:
Генератор:
node
unwrap(self)

Удаляет тег, но оставляет содержимое.

Пример:

>>>  tree = HTMLParser("<div>Hello <i>world</i>!</div>")
>>>  tree.css_first('i').unwrap()
>>>  tree.html
'<html><head></head><body><div>Hello world!</div></body></html>'
unwrap_tags(self, list tags)

Удаляет теги, но оставляет содержимое.

Работает также, как метод unwrap, но может использовать список тегов.

Параметры:
tags : list

Список тегов, которые требуется удалить.

Пример:

>>> tree = HTMLParser("<div><a href="">Hello</a> <i>world</i>!</div>")
>>> tree.body.unwrap_tags(['i','a'])
>>> tree.body.html
'<body><div>Hello world!</div></body>'