Продолжаю демонстрировать широчайшие возможности в сплогостроительстве.
Сегодня я покажу алгоритм-схему трубы-граббера целиком всего сайта, будет конечно же и рабочий пример. И так, допустим, есть некий сайт-источник, весь контент с которого мы хотим позаимствовать для своего сплога. Обычно, создается труба, которая следит за обновлениями на сайте-источниками посредством мониторинга его RSS-ленты и дергает полные тексты новых постов, затем эти посты появляются на нашем сплоге, ну т.е. труба, которая из обычной RSS-ленты делает RSS-ленту с полными текстами новостей . Но остается актуальной задача полного граббинга всего сайта, не олько полседних постов, а всего начиная с амомго первого поста - в этом случае RSS-лента сайта-источника нам не поможет, ведь в ней нет информации обо всех постах на сайте, там только последние 10-25 постов. Будем парсить страницы сайта и выдирать ссылки на все его посты - вот такое некрасивое решение.
Для примера я взял первый попавшийся сайт типа блог razvlekuha.org.ua - типичный пример новостного сайта или сайта-каталога или блога на движке WordPress.
1. Перейдем на главную страницу подопытного сайта, внизу страницы находим постраничую навигацию - больше нам ничего и не нужно. В данном случае постраничная навигация реализована с помощью плагина WP-Pagenavi:
Ссылки на страницы имеют вид http://razvlekuha.org.ua/?paged=N где N - порядковй номер страницы. Смотрим сколько всего навигационных страниц на сайте - их 688 штук. Говоря программерским языком, на нужно реализовать цикл, в котором мы пробежимся по всем страница сайта и повыдираем с каждой страницы ссылки на посты, в итоге мы получим ссылки на все посты сайта. Для реализации цикла нам понадобится массив, в который мы занесем адрса/указатели на навигационные страницы сайта. Поскольку в Yahoo Pipes нет никакой поддержки работы с массивами, то нам придется прибегнуть к использованию внешних файлов с данными, в частности, массивом будет выступать .
2. Теперь будем создавать трубу, она у нас будет всего одна, даже удивительно:) Я подробно покажу шаг за шагом как я делаю такие трубы-грабберы:
Перед созданием цикла на базе массива с порядковыми номерами навигационных страниц нам нужно поработать над распарсиванием лбой одной навигационной страницы. Возьмем для примера любую страницу (я взял http://razvlekuha.org.ua/?paged=2) и получим с нее ссылки на посты, размещенные на ней:
Для этого нам нужен модуль Fetch Page, тянуть данные мы будем только из той области страницы, где размещены анонсы постов. Всего на странице размещено по 5 анонсов постов, но, как видно на картинке, после отработки модуля Fetch Page у нас получается 6 item’ов - первый item (item c индексом 0) является побочным продуктом парсинга страницы и не содержит никакой ценной информации, поэтому от него мы избавимся следующим образом:
Вот теперь мы имеем 5 item’ов - ровно столько, сколько постов содержится на странице. В каждом item’е анонс одного поста, анонс включает в себя заголовок поста, ссылку на полный текст поста, краткое описание поста и категории/метки поста. Из анонса поста мы будем вырезать заголовк поста, ссылку на полный текст поста и категории поста. Делаем следующее:
Основные сложности связаны с выделением всех категорий поста. В данном примере я взял только категории поста, но конечно же можно брать категории и метки поста - в конечном итоге это все равно превратится либо в только категории либо в только метки поста на сплоге.
Теперь, получив все необходимые данные о посте (заголовок, ссылка на страницу с полным текстом поста, категории поста) мы переходим к получению полного текста поста. Напомню, что постов у нас 5 штук. Используем цикл Loop и снова модуль Fetch Page:
Ну вот мы и получили полные тексты 5-ти постов, записали ихкак и следует в Description. На данном этаме наш трубопровод имеет следующий вид:
Вот теперь мы переходим к использованию массива с порядковыми номерами навигационных страниц. Вернемся к началу трубы, добавим модуль для подгрузки csv-файла, в котором содержится наш массив:
На сайте 688 страниц, на каждой странице расположено 5 постов - получается 3440 постов. Награбить 3440 постов за раз это слишком много для трубы, она просто зависнет. Поэтому введем в нашу трубу 2 параметра: первый параметр StartPos будет задавать стартовую позицию в массиве - те эелементы массива, которые находятся до StartPos будут отбрасываться; и второй параметр Count будет задвать количество элементов массива, которые будут обрабатываться трубой начиная со стартовой позиции StartPos. Например, для того, что бы награбить контента с 50 страниц начиная с 100-й страницы, нужно задать StartPos=100 и Count=50:
Ну и наконец, мы организуем цикл по навигационным страницам, а в конце трубы добавим недостающих для валидности rss-фида элементов:
Все, труба готова.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Comments (3)
Member since:
Мар 3, 2012view profile
Re: Пример граббера всего сайта в Yahoo Pipes
...не могу настроить трубу под один буржуйский сервис, помогите с настройкой, отблагодарю wm....
Member since:
Сен 19, 2009view profile
Re: Пример граббера всего сайта в Yahoo Pipes
что требуется. можем помочь, если изложите все по пунктам
Member since:
Мар 3, 2012view profile
Re: Пример граббера всего сайта в Yahoo Pipes
только сейчас заметил что вы мне ответили...что-то не нахожу ваши контакты, отпишите пожалуйста на почту aiderbox@gmail.com, или в ICQ-393526254...почту и асю плиз в коменте не публикуйте..))))