При создании справочников для корпоративных порталов или приложений порой возникает проблема нахождения исходных данных для первоначального наполнения справочников. Это могут быть справочники населенных пунктов, телефонов, телефонных кодов, фамилий, адреса предприятий и т.п.. Часто такие данные можно найти в открытых источниках web. Однако, как правило, данные предоставляются в таком виде, что исключается их импорт в корпоративную базу данных или приложения. Обычно данные предоставляются в виде результата поиска на страницах интернет порталов. Представляемая в данной статье утилита "Анцитрус-паук" предназначена для загрузки интернет-страниц с данными, пригодных для создания справочников.
Рассмотрим задачу получения данных с сайта, когда необходимые сведения формируются как результат поиска на форме ввода web-страницы. Возьмем популярную задачу - составление справочника телефонных кодов городов России, для чего воспользуемся сайтом http://www.ru.all.biz/guide/phonecodes/. На данном ресурсе представлена форма поиска, позволяющая осуществить поиск телефонных кодов городов России, хранящихся в базе данных сайта. Форма имеет следующий вид:
В форме запрашиваюися следующие параметры поиска: город, телефонный код города, область, а результаты поиска отображаются постранично. Если скачать всю страницу целиком, то мы получим страницу, содержащую в себе много лишней информации (картинки, реклама, ссылки, ...). Более того, в силу особенностей интернет-приложений результат поиска разбивается на страницы: вторая страница вызывается по адресу http://www.ru.all.biz/guide/phonecodes/?page=2.
Результат запроса к базе данных представляется на 54 страницах! Параметром итерации выступает номер страницы (в данном случае параметр принимает значение от 1 до 54) в паре с ключом с именем page. Для того, чтобы пролистать все страницы с результатом поиска телефонных кодов городов России, необходимо последовательно выполнить вызов адресов: http://www.ru.all.biz/guide/phonecodes/?page=1 http://www.ru.all.biz/guide/phonecodes/?page=2 http://www.ru.all.biz/guide/phonecodes/?page=3 ..... http://www.ru.all.biz/guide/phonecodes/?page=54
Для скачивания только нужных данных необходимо выявить в HTML-коде страницы тег, содержащий в себе списочные данные. Обычно для этого используется табличный тег table, но может быть использован любой тег. Для наиболее простого разбора HTML в браузере Internet Explorer 8.0 встроены инструменты для web-дизайнера, которые вызываются по нажатию клавиши F12. В браузере FireFox можно использовать плагин Firebug. В связи с тем, что Firebug работает более стабильно, чем инструменты web-дизайнера Internet Explorer 8.0, рекомендуется использовать именно Firebug. В браузере FireFox данный плагин вызывается также по нажатию клавиши F12.
Для нахождения тега-контейнера для данных с телефонными кодами городов выполним следующие действия:
- в FireFox откроем адрес http://www.ru.all.biz/guide/phonecodes/;
- по нажатию клавиши F12 запустим Firebug;
- в Firebug выберем закладку HTML;
- в панели инструментов щелкнем на кнопку стрелка;
- щелкнем на тексте "населенный пункт"
Видно, что текст "населенный пункт" размещен в теге:
который в свою очередь заключен в теге:
Теперь нужно решить, по какому атрибуту среди всех тегов можно будет найти требуемый тег-контейнер. У HTML-элементов уникальным значением обладает только атрибут id, но в нашем случае он отсутствует. Будем использовать атрибут cellSpacing со значением 2, так как в этой странице тег table с атрибутом cellSpacing со значением 2 присутствует только один раз. В итоге задача загрузки телефонных кодов городов с вышеуказанной web-страницы можно сформулировать следующим образом: Дано:
- Необходимо скачать справочник телефонных городов;
- Телефонные коды городов сгружать с адреса http://www.ru.all.biz/guide/phonecodes/?page=[номер страницы] ;
- Счетчиком для итерации является номер страницы, передаваемый параметру page ссылки страницы. Счетчик принимает значение от 1 до 54;
- Результирующие данные содержатся в теге-контейнере table с уникальным атрибутом cellSpacing=”2”
Необходимо: - По указанному адресу скачать данные, используя счетчик итерации со значением от 1 до 54;
- В каждой полученной странице найти HTML-тег table с атрибутом cellSpacing=”2” и удалить все остальные теги.
Для скачивания страниц с данными о телефонных кодах гродов России форма параметров программы "Анцитрус-паук" должна быть заполнена следующим образом:
где: - адрес для скачивания: http://www.ru.all.biz/guide/phonecodes/ - на закладке "цифровой итератор" в поля "начальное значение" и "конечное значение" счетчика выставлены соответственно: 1 и 54 - тег элемента в странице: table - имя атрибута-ключа: cellSpacing - значение атрибута-ключа: 2 - текстовое поле "список параметров адреса": page={iterator} - категория: телефоны После завершения процесса скачивания в папке программы окажутся файлы, содержащие в себе HTML таблицы с телефонными кодами городов следующего вида:
Данный HTML-фрагмент можно отформатировать HTML-конвертором и данные импортировать в базу данных.
Вариант №2 скачивания данных с web-ресурса
Рассмотрим другой вариант скачивания данных с web-страницы. Будем использовать адрес сайта Российских железных дорог http://cargo.rzd.ru/isvp/public/cargo/ref_station?STRUCTURE_ID=5101&page4821_2705=1 для скачивания списка железнодорожных станций России. На странице присутствует форма для ввода параметров поиска и первая страница с результатами запроса.
В данном случае итерируемым параметром будет параметр page4821_2705: http://cargo.rzd.ru/isvp/public/cargo/ref_station?STRUCTURE_ID=5101&page4821_2705=1 http://cargo.rzd.ru/isvp/public/cargo/ref_station?STRUCTURE_ID=5101&page4821_2705=2 Параметры url данной страницы следующие: page4821_2705={iterator} - номер страницы в результате поиска, диапазон от 1 до 1024 STRUCTURE_ID=5101. Для определения тега-контейнера необходимо инструментом стрелка в Firebug щелкнуть на тексте "Код ЕСР". Анализ показывает, что текст содержится в элементе
а тегом-контейнером для него является тег
Таким образом, для скачивания страницы необходимо оставить тег table с артибутом class="Striped".
Для скачивания страниц со списком железнодорожных станций РЖД форма параметров программы "Анцитрус-паук" должна быть заполнена следующим образом: - адрес для скачивания: http://cargo.rzd.ru/isvp/public/cargo/ref_station - на закладке "цифровой итератор" в поля "начальное значение" и "конечное значение" счетчика поставить: 1 и 1024 - тег элемента в странице: table - имя атрибута-ключа: class - значение атрибута-ключа: Striped - список параметров адреса: После завершения процесса скачивания в папке программы будут размещены файлы, содержащие списки железнодорожных станций следующего вида:
Вариант №3 скачивания данных с web-ресурса
Рассмотрим загрузку списка кафе г. Москвы с сайта http://mosday.ru/guide/objects.php?type=food_cafe&page=1. Анализ URL говорит о том, что итерируемым параметром в web-ссылке является параметр page, номер страницы с диапазоном значений от 1 до 45. Для скачивания страниц со списком кафе в г. Москва форма параметров программы "Анцитрус-паук" должна быть заполнена следующим образом: - адрес для скачивания: http://mosday.ru/guide/objects.php - на закладке "цифровой итератор" в поля "начальное значение" и "конечное значение" счетчика поставить: 1 и 45 - тег элемента в странице: font - имя атрибута-ключа: style - значение атрибута-ключа: font-size:16px - кодировка страницы для url: windows-1251 - список параметров адреса: type=food_cafe и page={iterator}
После завершения процесса скачивания в папке программы будут размещены файлы, содержащие список кафе города Москвы в следующем виде:
В этих файлах HTML-код достаточно избыточен, поэтому перед импортом списка в базу данных HTML-код целесообразно преобразовать каким-нибудь HTML-конвертором.