Рабочая схема и пример граббера всего сайта в Yahoo Pipes

Опубликовано в (Yahoo Pipes, Контент) | автор splogmaster | 22-03-2009

Тэги: , ,

Продолжаю демонстрировать широчайшие возможности Yahoo Pipes в сплогостроительстве.

Сегодня я покажу алгоритм-схему трубы-граббера целиком всего сайта, будет конечно же и рабочий пример. И так, допустим, есть некий сайт-источник, весь контент с которого мы хотим позаимствовать для своего сплога. Обычно, создается труба, которая следит за обновлениями на сайте-источниками посредством мониторинга его RSS-ленты и дергает полные тексты новых постов, затем эти посты появляются на нашем сплоге, ну т.е. труба, которая из обычной RSS-ленты делает RSS-ленту с полными текстами новостей . Но остается актуальной задача полного граббинга всего сайта, не олько полседних постов, а всего начиная с амомго первого поста - в этом случае RSS-лента сайта-источника нам не поможет, ведь в ней нет информации обо всех постах на сайте, там только последние 10-25 постов. Будем парсить страницы сайта и выдирать ссылки на все его посты - вот такое некрасивое решение.

Для примера я взял первый попавшийся сайт типа блог razvlekuha.org.ua - типичный пример новостного сайта или сайта-каталога или блога на движке WordPress.

1. Перейдем на главную страницу подопытного сайта, внизу страницы находим постраничую навигацию - больше нам ничего и не нужно. В данном случае постраничная навигация реализована с помощью плагина WP-Pagenavi:

Yahoo_Pipes-Full_site_1

Ссылки на страницы имеют вид http://razvlekuha.org.ua/?paged=N где N - порядковй номер страницы. Смотрим сколько всего навигационных страниц на сайте - их 688 штук. Говоря программерским языком, на нужно реализовать цикл, в котором мы пробежимся по всем страница сайта и повыдираем с каждой страницы ссылки на посты, в итоге мы получим ссылки на все посты сайта. Для реализации цикла нам понадобится массив, в который мы занесем адрса/указатели на навигационные страницы сайта. Поскольку в Yahoo Pipes нет никакой поддержки работы с массивами, то нам придется прибегнуть к использованию внешних файлов с данными, в частности, массивом будет выступать .csv файл со списком порядковых номеров навигационных страниц сайта:

Yahoo_Pipes-Full_site_2

2. Теперь будем создавать трубу, она у нас будет всего одна, даже удивительно:) Я подробно покажу шаг за шагом как я делаю такие трубы-грабберы:

Перед созданием цикла на базе массива с порядковыми номерами навигационных страниц нам нужно поработать над распарсиванием лбой одной навигационной страницы. Возьмем для примера любую страницу (я взял http://razvlekuha.org.ua/?paged=2) и получим с нее ссылки на посты, размещенные на ней:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 1

Для этого нам нужен модуль Fetch Page, тянуть данные мы будем только из той области страницы, где размещены анонсы постов. Всего на странице размещено по 5 анонсов постов, но, как видно на картинке, после отработки модуля Fetch Page у нас получается 6 item’ов - первый item (item c индексом 0) является побочным продуктом парсинга страницы  и не содержит никакой ценной информации, поэтому от него мы избавимся следующим образом:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 2

Вот теперь мы имеем 5 item’ов - ровно столько, сколько постов содержится на странице. В каждом item’е анонс одного поста, анонс включает в себя заголовок поста, ссылку на полный текст поста, краткое описание поста и категории/метки поста. Из анонса поста мы будем вырезать заголовк поста, ссылку на полный текст поста и категории поста. Делаем следующее:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 3

Основные сложности связаны с выделением всех категорий поста. В данном примере я взял только категории поста, но конечно же можно брать категории и метки поста - в конечном итоге это все равно превратится либо в только категории либо в только метки поста на сплоге.

Теперь, получив все необходимые данные о посте (заголовок, ссылка на страницу с полным текстом поста, категории поста) мы переходим к получению полного текста поста. Напомню, что постов у нас 5 штук. Используем цикл Loop и снова модуль Fetch Page:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 4

Ну вот мы и получили полные тексты 5-ти постов, записали ихкак и следует в Description. На данном этаме наш трубопровод имеет следующий вид:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 5

Вот теперь мы переходим к использованию массива с порядковыми номерами навигационных страниц. Вернемся к началу трубы, добавим модуль для подгрузки csv-файла, в котором содержится наш массив:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 6

На сайте 688 страниц, на каждой странице расположено 5 постов - получается 3440 постов. Награбить 3440 постов за раз это слишком много для трубы, она просто зависнет. Поэтому введем в нашу трубу 2 параметра: первый параметр StartPos будет задавать стартовую позицию в массиве - те эелементы массива, которые находятся до StartPos будут отбрасываться; и второй параметр Count будет задвать количество элементов массива, которые будут обрабатываться трубой начиная со стартовой позиции StartPos. Например, для того, что бы награбить контента с 50 страниц начиная с 100-й страницы, нужно задать StartPos=100 и Count=50:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 7

Ну и наконец, мы организуем цикл по навигационным страницам, а в конце трубы добавим недостающих для валидности rss-фида элементов:

Рабочая схема и пример граббера всего сайта в Yahoo Pipes 8

Все, труба готова. Исходник трубы . Созданная мной труба всего лишь наглядный пример общей схемы сборки трубы-граббера.

Московская компания качественно и аккуратно поможет осуществить офисный переезд, квартирный переезд и упаковку мебели.





Комментарии:

Оставить комментарий