Кілька слів про Beautiful Soup

В певний момент мені довелося пошукати простенький модуль для парсингу та обробки XML/HTML. Можна було використати регулярні вирази, але ні бажання, ні часу не було розбиратися з ними. Після двадцяти хвилин пошуку натрапив на модуль Beautiful Soup, який фактично і створений для функції парсингу та обробки HTML/XML. Почитавши документацію він мене підкупив своєю простотою і зручністю.

У Beaurtiful Soup дуже зручно організований пошук посилань, класів, тегів і т.д… Фактично, можна з легкістю йому наказати шукати всі посилання у спарсеному документі або лише посилань, які мають клас externalLink, або змусити його показувати лише посилання, що посилаються на конкретний сайт тощо. На цьому його функції не обмежуються. Завдяки багатій документації можна знайти вирішення фактично любої потреби. Встановлення та кілька найпростіших прикладів — під катом.

Встановлення
Починаючи з версії 3.8, встановлення Beautiful Soupe значно спростилося. Достатньо скачати сам модуль, розпакувати його, зайти в каталог з терміналу та ввести:
sudo python ./setup.py install
Фактично через кілька секунд встановлення завершиться.

Кілька прикладів

Як я згадував вище, Beautiful Soup має багату документацію, і хоч вона англійською мовою, з прикладів все стає зрозумілим у разі поганого знання англійської.

Найпростіший приклад викорситання Beautiful Soup.
Отже, ми маємо спарсений документ, і нам потрібно отримати лише контент, який знаходиться між тегом . Для цього достатньо кількох рядків коду:

from BeautifulSoup import BeautifulSoup
doc = "<html><h1>Rozrobka</h1><p>Text"
soup = BeautifulSoup(doc)
heading = soup.h1
print heading.renderContents()


Після запуску скрипту він поверне нам лише слово Rozrobka. Просто? Зручно? Отож :)

І тепер дещо складніший приклад. Нехай деякий контент захований у <div class='test'>Rozrobka</div>, тоді використовуємо таку конструкцію:

from BeautifulSoup import BeautifulSoup
doc = "<html><div class='test'>Rozrobka</div><p>Text"
soup = BeautifulSoup(doc)
heading = soup.find(«div», { «class»: «test» })
print heading.renderContents()


Знову ж таки, скрипт поверне нам слово Rozrobka, яке є тим контентом, який ми хотіли отримати.

Більше прикладів та документації можна знайти у розділі Documentation на сайті Beautiful Soup.
  • +7
  • 19 лютого 2010, 20:14
  • theasus

Коментарі (4)

RSS згорнути / розгорнути
+
0
чи є щось подібне для Ruby?
avatar

lemon

  • 24 лютого 2010, 12:43
+
+1
я колись цікавився питанням, висвітленим у цьому пості, і мені на Stack Overflow як один із варіантів запропонували аналог для Ruby т.з. Hpricot. оскільки я з Ruby ніколи не працював, то можу хіба сам повторно проделегувати цей лінк сюди :)

і якшо когось ше зацікавить, то є аналоги: TagSoup для Java, Taggle для C++ і TSaxon для XSLT. знову ж таки, не перевіряв
avatar

cyba

  • 24 лютого 2010, 16:52
+
0
вельми вдячний!
avatar

lemon

  • 24 лютого 2010, 23:12
+
0
Починаючи з версії 3.8, встановлення Beautiful Soupe значно спростилося.

Він на easy install також є
sudo easy_install BeautifulSoup
avatar

sandric

  • 19 березня 2010, 00:06

Тільки зареєстровані й авторизовані користувачі можуть залишати коментарі.