Pull to refresh

Comments 27

Как минимум в pyquery нет конвертации в другой язык разметки. И не уверен насчет .get. Вообще, когда писалась библиотека из распространненых парсеров были только BeautifulSoup и lxml, первый довольно кривой, для второго и была написана эта обертка. Плюс, субъективно эта библиотека проще.
Плюс, как мне показалось pyquery больше направлен на модификацию html, а leaf на сам парсинг.
А сейчас реализована конвертация в markdown?
Было бы интересно получить функцию наподобие «упростить форматирование» из эвернота.
Сейчас в планах есть написать готовые конверторы для популярных языков разметки, а пока можно написать самому. Там получаются очень простые конверторы. Если сильно нужно, могу сегодня сделать markdown.
Просто я не уверен, что можно так в лоб перегонять. Сходу только вложенные p и списки на ум приходят. В таком случае нужно поверх написать prettify-катор. Да и со стилями опять же могут быть проблемы.
Те конвертеры которые я видел не делают ничего хорошого из реальной страницы.
Библиотека однозначно удобная по синтаксису.
Ну, если в странице болд отображается через:
<p class="text-bold">blah</p>

то такой текст довольно сложно сконвертировать. В остальных же случаях все более-менее нормально.
Буквально 3 дня назад писал конвертер html -> bbcode, учесть всё и везде не так просто, буду следить за развитием этого проекта. Спасибо за наводку.

PS Вот например минимум 3 способа отцентровать текст в html:
<div align="center">
<div style="text-align: center">
<center>
Только вот вроде в markdown нет ни одного такого способа :3
Плюс как правило стили учитывать не обязательно. Главное получить читабельный текст с форматированием, а не всю верстку.
Eсли нужен только текст: text = re.sub('<.+?>', '', html)
Я считаю что нужно максимально приблизить вёрстку к оригиналу, хотя я согласен, что случаи бывают разные.
Ну, верстка будет такой же как и в оригинале, а стили это уже немного другое. Как и расположение элементов (align, etc)
UFO just landed and posted this here
Это не «велосипед», это как-бы такой толстый запрос на сравнение по функционалу или производительности, чтобы определиться переходить или нет. Ну я так считаю.
Производительность такая же, как у lxml, там оверхед очень маленький.
Причем тут не нужно? Есть две обертки поверх lxml, интересно их сравнение, а так же что сподвигло автора написать свою.
Не знаю в чем проблема. Если нужно просты выдергивать значения, если сделать регепс, то он будет работать. Данные штуки, скорее всего, для тех кто не понимает регепсы. Ну я так считаю, если не прав, поправьте…
Вообще, парсить различные языки разметки, такие как html регекспами считается плохим тоном, т.к. такие парсеры очень легко ломаются при изменении страницы.
Также, парсер сделанный для определенной разметки будет работать быстрее, чем для любой.
Да и при использовании html парсеров код получается красивей, чище и более легко поддерживается.
Да ладно вам, нормальная библиотека. Она решает свою конкретную задачу.

Не в качестве альтернативы, а как расширение кругозора — есть еще Scrapy. Он тоже вполне неплох для парсинга
Scrapy это немного из другой оперы))) Ничто не мешает использовать этот Leaf внутри Scrapy. А Scrapy он в основном именно как платформа для скачивания страничек. Чем ты их будешь парсить ему все равно. А так да, Scrapy обалденный ^_^.
scrapy использует для парсинга libxml2 либо lxml.
Обертка для обертки, но в любом случае на заметку возьмем.
По поводу генерации XML в другие языки разметки — тут лаконичнее смотрелся бы XSLT. По крайней мере он больше контроля дает. К примеру для генерации bb кодов я бы такого плана шаблон наваял вместо вашего примера:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version = "1.0"	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="br">
<xsl:text>
</xsl:text>
	</xsl:template>

	<xsl:template match="a[@href]">[url=<xsl:value-of select="@href"/>]<xsl:apply-templates />[/url]</xsl:template>
</xsl:stylesheet>


Возможно выглядит неубедительно, но при увеличении количества правил общая сложность понимания почти не растет. Я, например, для эксперимента дописал шаблоны для превращения ul/li и ol/li в Markdown * и #, заголовков в "==", b,i,u тегов в их BB-code аналоги и защиту от script инъекций — уложился в ~50 строк.
не думаю что тут получится сильно больше. зато python читаемее xslt, как по мне.
Sign up to leave a comment.

Articles