Парсим даты апдейтов с главной pr-cy
Привет! Давно не писал :)
Как известно на главной странице pr-cy.ru есть даты обновлений тИЦ, pr и яндекс выдачи. Я, как и многие, часто захожу туда, дабы проверить, не обновилось ли что-нибудь.
Сегодня напишем небольшую программу-пример, показывающую, как получить эти даты.1) Сперва заходим на сайт, видим:
Теперь смотрим исходный код фрагмента:
<p><span class="blue">G</span><span class="red">o</span><span class="yellow">o</span><span class="blue">g</span><span class="red">le</span> <span class="lar">PR</span><span class="date"><acronym title="11 д. назад">03.04.2010</acronym></span></p> <p><span class="red">Я</span><b>ндекс</b> <span class="ar">тИЦ</span><span class="date"><acronym title="6 д. назад">08.04.2010</acronym></span></p> <p class="p-last"><span class="ar">выдача</span><span class="date"><b>13.04.2010</b></span></p>
Достаточно примечательный фрагмент.
Итак, создадим новую программу, поставим кнопку и надпись (Button1 и Label1).
Для получения страницы мы будем использовать библиотеку Synapse, поэтому подключим модуль httpsend.
В процедуре-обработчике нажания на кнопку пропишем:
procedure TForm1.Button1Click(Sender: TObject); var vres: TStringList; begin vres:=TStringList.Create; if HttpGetText('http://pr-cy.ru', vres) then begin // мы успешно получили код страницы pr-cy, дальше будем писать сюда end else begin ShowMessage('error getting pr-cy!'); end; vres.Free; end;
Теперь введём переменные scy, spr, syv: string; и константу cpr = ‘<span class=»lar»>PR</span>’; — по ней мы будем ориентироваться.
Строки с датами найдём так:
i:=0; Repeat if Pos(cpr, vres.Strings[i])<>0 then break; i:=i+1; until 1=0; spr:=vres.Strings[i]; scy:=vres.Strings[i+1]; syv:=vres.Strings[i+2];
Выделим в каждой строке span с помощью функций delete, pos и posex (strutils):
i:=Pos('<span class="date">', spr); Delete(spr, 1, PosEx('">', spr, i+1)+1); i:=Pos('<span class="date">', scy); Delete(scy, 1, PosEx('">', scy, i+1)+1); i:=Pos('<span class="date">', syv); Delete(syv, 1, PosEx('">', syv, i+1)+1);
Ещё немного попарсим:
i:=Pos('<span class="date">', spr); Delete(spr, 1, PosEx('">', spr, i+1)+1); i:=Pos('<span class="date">', scy); Delete(scy, 1, PosEx('">', scy, i+1)+1); i:=Pos('<span class="date">', syv); Delete(syv, 1, PosEx('">', syv, i+1)+1); repeat i:=Pos('<', spr); if i=0 then break; Delete(spr, i, PosEx('>', spr, i)); until 1=0; repeat i:=Pos('<', scy); if i=0 then break; Delete(scy, i, PosEx('>', scy, i)); until 1=0; repeat i:=Pos('<', syv); if i=0 then break; Delete(syv, i, PosEx('>', syv, i)); until 1=0; spr:=StringReplace(spr, '>', '', [rfReplaceAll]); scy:=StringReplace(scy, '>', '', [rfReplaceAll]); syv:=StringReplace(syv, '>', '', [rfReplaceAll]); spr:=StringReplace(spr, ' ', '', [rfReplaceAll]); scy:=StringReplace(scy, ' ', '', [rfReplaceAll]); syv:=StringReplace(syv, ' ', '', [rfReplaceAll]);
И можно вывести результат:
Label1.Caption:='pr: '+spr+#13#10+'тИЦ: '+scy+#13#10+'Выдача: '+syv;
Вот и вся арифметика. Скачать проект с парсингом дат можно по этой ссылке.
Также советую готовую программу от Борисова Сергея — Search Monitor, спасибо, что обратили на неё внимание :)
Давно я не появлялся :) Меня просто очень сильно мотивировали написать пост обои для рабочего стола. Они бесплатные :D
Сразу видятся 2 пути развития:
— добавить еще сворачивание в трей и вызов по hotkey, для быстрого просмотра
— и массовая проверка хостов с последующим выводом в *.txt / *xls формате
Спасибо. На простом примере разъяснили впринципе всю технологию парсинга
Мне всегда было интересно зачем писать то, что в жизни требуется только когда метеорит упадет , т.е. раз в жизни. Насколько я помню эти выдачи не случаются каждый день, а раз в 2 недели можно спокойненько за йти на сайт и посмотреть. Ты не думай что я тебя упрекаю в создании чего нибудь ненужного, просто если бы ты применил свои знания к чему нибудь более весомому, так и люди были бы более довольны, ведь есть же например до черта тем где нужны прогеры с головой как у тебя а не жопой с ручкой
Удачи в жизни. Простая женщина
Ну что за нападки опять… Сперва советую прочитать название блога, а потом его адрес.
Сайт про парсинг, а это пример. Как видим, такое нужно может и редко, но вполне удачно реализовано в той же программе Search Monitor, а многие люди живут от выдачи до выдачи, так как не всегда ограничивается одним блогом, а порой сеткой, и не одной, сателлитов =)
Ок я тебя поняла. Тогда так : сделай парсер для сайта Subscribe.ru—- Т.З. ввожу название категории, кол-во статей и парсер парсит (чистый текст, без тегов и форматирования) создает как результат своей работы TXT файлы, каждый файл имеет название с тайтла статьи + в файле первая строчка тайтл статьи с форматированием Заголовок1 (как в OpenOffice). Готова купить прогу. Моя аська: 40-57ноль96-27
ТЗ вроде несложное, но ближайшую неделю времени нет. Разгребу кучу дел, там может посмотрим =)
Сейчас не возьмусь
Парси другие сайты, ставь информеры — вот и горов сайтец!
Отлично…сделаю первую парсилку )
Классный способ. У меня на сайте раньше гораздо сложнее схема была, с зарубежного сайта. через специальный «тяжелый» плагин. Буду этот настраивать!
Поправь форматирование кода в статье, разъезжается жесть)
Странно, что разъезжается, должен плагин всё превращать в красивый код.
Как-никак, сейчас посмотрю
что-то с ним не так, как-нибудь поправлю) надеюсь)
Код после фразы
» Теперь смотрим исходный код фрагмента:» разъезжается очень сильно в Гугл Хроме
У меня вообще на блоки и в правую сторону строка пошла. Вообще ужас Читать не удобно совсем. У меня Mozilla Firefox.
Уважаемый администратор, исправьте, пожалуйста!
Отлично сделано, я в этом не бум бум)) но принцип понравился, попробую ща
А можно вывести у себя на блоге в виджете такую обновляемую штучку? Что для этого нужно сделать?
Писать на php :)
а что значит vres.Free ?
это вроде не очистка переменной..
А парсер по Адвордсу с залогиненого аккаунта и настройками частотности и регионов слабо сделать? Такого софта не хватает (кроме AllSubmitter который стоит приличную сумму)
Я не могу понять для чего эта информация. Если можно просто зайти на сайт поставить свой сайт и посмотреть результаты. Если что я не понял правильно, извини. Идея нормальная, хоть с чего то надо начинать.
Успехов тебе в дальнейшем.
Спасибо) Не понял и ладно :)
А мне приходит инфа об оновлении каталога просто потому, что имею аккаунт на SEOBudget — у них это автоматическиая рассылка для всех зарегестрованных пользователей. И обновления Каталога Яндекса тоже приходят.
Все куда проще используйте xml http://pr-cy.ru/updates.xml