типов с помощью заголовков запроса HTTP. Например, сложный сервис с интер-
фейсом REST может принимать и возвращать данные в строках JSON.
278
Глава 9. Распутываем Всемирную паутину
JSON
В главе 1 были показаны два фрагмента кода, с помощью которых мы получали
информацию о популярных видео на YouTube, а в главе 8 мы узнали о JSON. JSON
особенно хорошо подходит для создания веб-серверов и обмена данными. Этот
формат наиболее популярен в сетевых API вроде OpenStack.
Поиск и выборка данных
Иногда вам нужно получить немного больше информации — рейтинг фильма, цену
акции или доступность продукта, — но информация доступна только на HTML-
страницах, при этом она окружена рекламой и посторонним контентом.
Вы можете извлечь необходимую информацию вручную, сделав следующее.
1. Введите URL в браузер.
2. Подождите, пока загрузится удаленная страница.
3. Просмотрите отображенную страницу на предмет необходимой информации.
4. Запишите ее где-нибудь.
5. Повторите процесс для связанных URL.
Однако гораздо более приятно автоматизировать некоторые из этих шагов.
Программа, автоматически получающая данные из Сети, называется краулером
или веб-пауком (неприятный термин, если вы арахнофоб). После того как содер-
жимое было получено с одного из удаленных веб-серверов, парсер анализирует ее,
чтобы найти иголку в стоге сена.
Если вам нужно мощное решение, объединяющее в себе возможности поиска
и выборки данных, вам стоит загрузить Scrapy (http://scrapy.org/):
$ pip install scrapy
Scrapy — это фреймворк, а не модуль, в отличие от BeautifulSoup. Он имеет
больше возможностей, но зачастую его трудно настроить. Чтобы узнать больше
о Scrapy, прочтите документацию (http://scrapy.org/) или познакомьтесь с ним по
адресу http://bit.ly/using-scrapy.
Получаем HTML-код с помощью BeautifulSoup
Если у вас уже есть HTML-данные с сайта и вы просто хотите извлечь оттуда дан-
ные, вам подойдет BeautifulSoup (http://www.crummy.com/software/BeautifulSoup/).
Анализировать HTML труднее, чем кажется. Это происходит потому, что большая
часть HTML-кода на общедоступных веб-страницах технически некорректна: не-
закрытые теги, неправильная вложенность и прочие усложнения. Если вы пытае-
тесь написать свой HTML-анализатор с помощью регулярных выражений, ко-
Веб-сервисы и автоматизация
279
торые мы рассматривали в главе 7, вы довольно скоро столкнетесь с подобным
беспорядком.
Для того чтобы установить BeautifulSoup, введите следующую команду (не за-
будьте поставить в конце четверку, иначе pip попробует установить более старую
версию и, возможно, выдаст ошибку):
$ pip install beautifulsoup4
Теперь воспользуемся им для того, чтобы получить все ссылки с веб-страницы.
Элемент HTML a представляет собой ссылку, а href — ее атрибут, который пред-
ставляет собой место назначения ссылки. В следующем примере мы определим