Парсер создавался для скрабинка карточек товаров с веб-сайтов.
Есть HTML веб-страница:
<html> <head> <title>Title page</title> <meta charset="UTF-8"> </head> <body> <h1 class="name" data-name="Header">Header H1</h1> <h2>Header H2.1</h2> <h2>Header H2.2</h2> <span data-type="type1">Product description text</span> <span class="price" elem="USD">99ドル</span> <div id="product-gallery" value="1"> <a href="img1.jpg"><img src="img1.jpg" alt="Image 1" /></a> <a href="img2.jpg"><img src="img2.jpg" alt="Image 2" /></a> <a href="img3.jpg"><img src="img3.jpg" alt="Image 3" /></a> </div> </body> </html>
Задаем шаблон для парсинга:
<template> <h1 class="name" data-name="$data-name">$Head1</h1> <h2>$Head2</h2> <span elem="$Сurrency">$Price</span> <span data-type="$Type">$Description</span> <div id="product-gallery" value="$product_gallery"> <a href="$Img"></a> </div> </template>
${var} -- название переменной, в которую будет занесен результат.
result = ParserHTML(template, html_contents) print(result.get())
Массив данных
{'Head1': ['Header H1'], 'Head2': [['Header H2.1'], ['Header H2.2']], 'Price': ['99ドル'], 'Сurrency': 'USD', 'Description': ['Product description text'], 'Type': 'type1', 'product_gallery': '1', 'Img': ['img1.jpg', 'img2.jpg', 'img3.jpg']}Группировка, если задать атрибут group="имя группы". Если не заданно, тое именем будет тег узла Если установить атрибут nogroup, то из группы будет взята только первая группа значений