воскресенье, 14 июня 2009 г.

Делаем правильный суп

По совету bw решил попробовать html5lib для решения заморочки с Beautifulsoup и получилось избавиться от некрасивого воркараунда (правда, ворнинг словился):
>>> import urllib
>>> html = urllib.urlopen('http://django-newbie.blogspot.com/').read()
>>> import html5lib
>>> from html5lib import treebuilders
>>> parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
>>> soup = parser.parse(html)
/usr/local/lib/python2.6/dist-packages/html5lib-0.11.1-py2.6.egg/html5lib/inputs
tream.py:367: DeprecationWarning: object.__init__() takes no parameters
>>> soup.findAll('link', {'type':'application/rss+xml'})[0]['href']
u'http://django-newbie.blogspot.com/feeds/posts/default?alt=rss'

4 комментария:

  1. Непонятно, ты всё равно используешь html.replace, неужто без него никак?
    А что касается DeprecationWarning, то эта не наша забота :-). Должны исправить в будущем, библиотека развивается очень интенсивно.

    ..bw

    ОтветитьУдалить
  2. Блин, ничего себе я лоханулся :)
    Копипаст маст дай!
    (сейчас подправлю код)
    А про deprecation - я тикет завёл, в хэде оно поправлено, только суповский парсер у них сейчас не работает - так что в следующем релизе всё должно быть без проблем вообще.

    ОтветитьУдалить
  3. Я как с html5lib познакомился, решил стать религиозно-правильным и от супа вообще отказался, т.е. парсил в dom, а по dom'у уже ходил xpath'ем. Вообще от xpath'а я остался под большим положительным впечатлением, ребята знали, что делали. Хотя, безусловно, что бы начать его полноценно использовать потребуется время.
    Собственно. Я к тому что, если такая проблема проявляется только для супа, то я и не мог с ней столкнуться.

    ..bw

    ОтветитьУдалить