Посты с тэгом beautifulsoup


От парсера афиши театра на Python то Telegram-бота. Часть 1


Я очень люблю оперу и балет, но не очень — отдавать большие деньги за билеты. Ежедневный просмотр сайта театра с тыканьем в каждую кнопку ужасно утомлял, а внезапно появлявшиеся билеты по 170 рублей на супер-составы бередили душу.
Чтобы автоматизировать это дело появился скриптик, который бежит по афише и собирает информацию о самых дешевых билетах на выбранный месяц. Запросы из серии «выдай список всех опер в марте на старой и новой сцене до 1000 рублей». Подруга обронила «а ты не Telegram-бота делаешь?». Такого в плане не было, но почему бы и нет. Бот родился, хоть и крутился на домашнем ноутбуке.
Потом Telegram заблокировали. Мысль запулить бота на рабочий сервер растаяла, да и интерес, чтобы довести функционал до ума, угас. Под катом рассказываю о судьбе сыщика дешевых билетов с самого начала и о том, что с ним сталось после года использования.


Парсим мемы в питоне: как обойти серверную блокировку

Новогодние праздники — прекрасный повод попрокрастинировать в уютной домашней обстановке и вспомнить дорогие сердцу мемы из 2k17, уходящие навсегда, как совесть Electronic Arts.



Однако даже обильно сдобренная салатами совесть иногда просыпалась и требовала хоть немного взять себя в руки и заняться полезной деятельностью. Поэтому мы совместили приятное с полезным и на примере любимых мемов посмотрели, как можно спарсить себе небольшую базу
данных, попутно обходя всевозможные блокировки, ловушки и ограничения, расставленные сервером на нашем пути. Всех заинтересованных любезно приглашаем под кат.

Читать дальше →


Селекторы CSS и BeautifulSoup

Бывает нужно проверить наличие элемента на странице, узнать значение атрибута какого-то тега или сделать ещё что-то такое с 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<