При создании справочников для корпоративных порталов или приложений порой возникает проблема нахождения исходных данных для первоначального наполнения справочников. Это могут быть справочники населенных пунктов, телефонов, телефонных кодов, фамилий, адреса предприятий и т.п.. Часто такие данные можно найти в открытых источниках 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-конвертором.