Структура любой HTML–страница представляет собой иерархию контейнеров (которые задаются HTML–тэгами). Большой контейнер содержит в себе множество более мелких — например, таблицу, которая делится на более мелкие элементы: ряды и ячейки. Существует множество видов тегов, которые выполняют разные функции — некоторые создают контейнеры, другие оформляют таблицы, изображения или рисунки. Тэги могут иметь дополнительные свойства (например, они могут быть уникальными идентификаторами) и могут делиться на группы, называемые классами, что предоставляет возможность находить и захватывать определенные элементы в документе. Выбор необходимых элементов и извлечение их содержания играют определяющую роль в написании «скребка».
При просмотре элементов веб–страницы все ее содержимое может быть разбито на контейнеры внутри контейнеров.
Для «выскребания» веб–страниц вам необходимо узнать немного побольше о различных типах элементов, которые могут встречаться в HTML–документе. Например, элемент
(данные таблицы) для каждой ячейки. Наиболее часто вы будете сталкиваться с элементом , который, по сути, обозначает какой–либо блок контента. Легче всего понять эти элементы можно, используя
панель разработчикавашего браузера, которая позволит вам посмотреть, из чего состоит код, лежащий в основе той или иной части веб–страницы. |
Тэги работают как разделители, обозначая начало и конец определенного блока. Например, означает начало выделенного курсивом текста, а тэг
означает конец этого блока. Все просто.Рис 55. The International Atomic Energy Agency’s (IAEA) portal (news.iaea.org)
Пример: сбор информации о происшествиях в ядерной отрасли с использованием кода на языке Python
NEWS — это портал Международного агентства по атомной энергии (МАГАТЭ), посвященный происшествиям в ядерной отрасли по всему миру (и являющийся уверенным кандидатом в члены Клуба роковых названий!). На этой веб–странице происшествия представлены в виде простого, похожего на блог списка, который может быть легко извлечен.
Для начала создайте новый «скребок» на языке Python на сайте ScraperWiki, в результате чего вы получите почти пустую область текста, в которой будет находиться только вспомогательный код. В другом окне откройте браузер, откройте там сайт МАГАТЭи затем откройте в этом браузере панель разработчика. В режиме просмотра «Элементы» попытайтесь найти HTML–элементы заголовка одной из новостей. Панель разработчика браузера помогает связывать элементы веб–страницы с лежащим в их основе HTML–кодом.
Изучая эту страницу, вы поймете, что заголовки являются элементами
Чтобы преобразовать этот процесс в код, мы должны понять для себя все все его шаги. Чтобы лучше понять, что это за этапы, давайте сыграем в простую игру. В окне ScraperWiki попробуйте написать для себя индивидуальные инструкции по каждому шагу, который вы собираетесь сделать в ходе написания этого «скребка», наподобие пунктов в кулинарном рецепте (отбейте каждую строку хэш–кодом, чтобы дать понять языку Python, что это не настоящий компьютерный код). Например:
# Просмотреть все строки в таблице
# Unicorn не должен выходить за левый край
Постарайтесь быть как можно более точным и не предполагайте, что программа что–либо знает о странице, которую вы пытаетесь «выскрести».
Теперь, когда вы написали свой первый псевдо–код, давайте сравним его с реальным кодом нашего первого «скребка»:
import scraperwiki
from lxml import html