Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 215

Клиент RESTful также может запрашивать содержимое одного или нескольких

типов с помощью заголовков запроса 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 — ее атрибут, который пред-

ставляет собой место назначения ссылки. В следующем примере мы определим