Одна из ключевых возможностей Nimbus Note — это сохранение и/или редактирование заметок в виде html-документа. И заметки эти создаются/редактируются в браузере или на мобильных устройствах. После чего — отправляются на сервер. А как подсказывает профессиональная паранойя — информации пришедшей от пользователя доверять нельзя. Т.к. там может быть всё что угодно: XSS, документ, превращающий вёрстку в мечту абстракциониста или вообще ни разу не текст. Следовательно, данные пришедшие от пользователя нуждаются в предварительной обработке. В этой статье я опишу некоторые особенности нашего решения данной проблемы.
Метка «lxml»
Парсер в Nimbus Note, или как мы решали проблему «чистого» HTML
2014-03-28 в 11:20, admin, рубрики: beautiful soup, lxml, nimbus, python, Блог компании FVD Media, Веб-разработка, парсеры, разработка, метки: beautiful soup, lxml, nimbus, python, Веб-разработка, парсеры, разработкаGrab — новый интерфейс для работы с DOM-деревом HTML-документа
2013-03-19 в 22:11, admin, рубрики: data mining, dom, html, lxml, python, xpath, парсинг сайтов, метки: data mining, dom, html, lxml, python, xpath, парсинг сайтовБенчмарк HTML парсеров
2012-12-26 в 9:25, admin, рубрики: benchmark, dom, erlang, html, lxml, nodejs, parser, PyPy, python, xpath, высокая производительность, Программирование, метки: benchmark, c++, dom, erlang, html, lxml, nodejs, parser, PyPy, python, xpathПереписывал на работе кусок одного сервиса с Python на Erlang. Сам сервис занимается тем, что скачивает по HTTP значительное количество однотипных HTML страниц и извлекает из них некоторую информацию. Основная CPU нагрузка сервиса приходится на парсинг HTML в DOM дерево.
Сперва захотелось сравнить производительность Erlang парсера mochiweb_html с используемым из Python lxml.etree.HTML(). Провел простейший бенчмарк, нужные выводы сделал, а потом подумал что неплохо было бы добавить в бенчмарк ещё парочку-другую парсеров и платформ, оформить покрасивее, опубликовать код и написать статью.
На данный момент успел написать бенчмарки на Erlang, Python, PyPy, NodeJS и С в следующих комбинациях:
- Erlang — mochiweb_html
- CPython — lxml.etree.HTML
- CPython — BeautifulSoup 3
- CPython — BeautifulSoup 4
- CPython — html5lib
- PyPi — BeautifulSoup 3
- PyPi — BeautifulSoup 4
- PyPi — html5lib
- Node.JS — cheerio
- Node.JS — htmlparser
- Node.JS — jsdom
- C — libxml2 (скорее для справки)
В тесте сравниваются скорость обработки N итераций парсера и пиковое потребление памяти.
Интрига: кто быстрее — Python или PyPy? Как сказывается иммутабельность Erlang на скорости парсинга и потреблении памяти? Насколько быстра V8 NodeJS? И как на всё это смотрит код на чистом C.
Читать полностью »
Опыт ленивого переноса блогосайта с Drupal на статику при помощи Python
2012-06-26 в 17:19, admin, рубрики: drupal, lxml, python, web-разработка, Веб-разработка, статические страницы, статический блог, статический контент, метки: drupal, lxml, python, web-разработка, статические страницы, статический блог, статический контентСначала ответ на вопрос «А зачем переходить с Drupal на статику»
Если посмотреть на то, как устроено большинство сайтов, то видно, что, чаще всего, необходимости именно в динамичности содержимого нет. Эти сайты — набор статических (или редко изменяющихся) материалов. Интерактив с посетителями редкость.
Единственное, что оправдывает в такой ситуации технологию CMS — это очень быстрое создание сайтов.
Фактически Drupal (да и другие CMS) используются в таких случаях просто как редактор той или иной публикации на сайте.
Статика прекрасно бы подошла под такие задачи. Она требует меньше ресурсов сервера и существенно проще администрируется.
В качестве вспомогательного инструмента для перехода и дальнейшей эксплуатации в статике выбран Python.
Python / Документация по Grab — библиотеке для парсинга сайтов
2012-03-05 в 10:27, admin, рубрики: data mining, grab, grablab, lxml, pycurl, python, spider, парсинг, метки: data mining, grab, grablab, lxml, pycurl, python, spider, парсингЯ ранее уже рассказывал на хабре о Grab — библиотеке для парсинга сайтов и о Spider — асинхронном модуле для парсинга. Рад сообщить, что я наконец-то дописал документацию по Grab. Я решил писать всё на русском языке т.к. на английском языке мне труднее выражать мысли. На деле писанины получилось гораздо больше, чем представлялось в начале, но я таки описал практически все функции библиотеки. Я решил просто вставить сюда, оглавление, кликайте на интересный раздел и читайте о возможностях Grab:
- <a rel="nofollow"Читать полностью »