вторник, 1 июля 2008 г.

Ruby: hpricot error

Если у вас стоит задача распарсить / изменить какой то html, и вы пишете на ruby то на мой взгляд идеальный вариант - использование небольшой и быстрой библиотеки hpricot. Она написана на С поэтому работает довольно быстро (быстрее чем другие парсилки).

Hpricot позволяет анализировать и редактировать html с помощью css селекторов или xpath селекторов. Вобщем очень удобно и просто.

Инструкция для установки.

Но у hpricot есть небольшие проблемки, например иногда при создании документа:
require 'hpricot'
doc = Hpricot "some html"

возникает ошибка
ArgumentError. negative string size (or size too big).

Оказывается бывает такое из-за каких-то последовательностей символов в html. Эти ошбки постепенно фиксятся разработчиками, но буквально сегодня у меня она возникала, парсер падал из-за того, что в html была последовательность символов "\r\n". Так как мне эти символы совсем не нужны я их просто вырезаю.
html.gsub!("\r\n", "")
doc = Hpricot html

4 коммент.:

Yury Korolev комментирует...

Ну не такой уж и быстрый этот hpricot.
Вот http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/226482

Антон Любарский комментирует...
Это сообщение было удалено автором.
Антон Любарский комментирует...

Вместо
html.gsub!("\r\n", "")
можно
html.chop!

или html.chomp!

Alex Ilin комментирует...

Спасибо Антон, раньше не использовал этот метод, буду знать.