Бывает нужно проверить наличие элемента на странице, узнать значение атрибута какого-то тега или сделать ещё что-то такое с HTML-документом (HTML, а не XML). Я для таких вещей использовал BeautifulSoup - он работает примерно так, и делает это хорошо.
>>> html = '<html lang="ru">...</html>'
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> soup.find("html").get("lang")
ru
Но jQuery приучил к тому, что должна быть возможность адресоваться к элементам с помощью CSS нотации. Видимо, не меня одного.
soupselect добавляет нужную функциональность.
>>> html = '<html lang="ru"><div class="title"><h3>foo</h3></div></html>'
>>> from BeautifulSoup import BeautifulSoup as Soup
>>> from soupselect import select
>>> select(soup, 'div.title h3')
[<h3>foo<