Поиск по блогу

вторник, 6 января 2009 г.

Создание карты блога на blogspot.com своими руками

Это очередной простенький пример применения парсинга. Даже не столько парсинга, сколько работы с объектной моделью браузера.

Чтобы создать карту блога на blogspot.com (я рассматриваю в качестве примера свой лытдыбровый блог), можно воспользоваться головой и данными из виджета "Архив блога". Изучим код страницы. Виджет оформлен как div с id='ArchiveList'. Внутри дива — ненумерованный список. Элементы UL, группирующие ссылки по месяцам, имеют classname='posts'. Сразу становится понятно, что для создания карты сайта достаточно будет выбрать все элементы LI, находящиеся внутри упомянутых UL. Это делается в два счета при работе с MSHTML.

Обработчик кнопки "Start":

procedure TBlogspotSiteMapF.btnStartClick(Sender: TObject);
var
Doc : IHTMLDocument2;
DocAll,
DocLi : IHTMLElementCollection;
ParentElement,
DocElement : IHtmlElement;

i : integer;
begin
WebBrowser.Navigate(edtURL.Text);
while WebBrowser.ReadyState <> READYSTATE_COMPLETE do
begin
Application.ProcessMessages;
end;

Doc := WebBrowser.Document as IHTMLDocument2;
if Assigned(Doc) then
begin
DocAll := Doc.all;
DocLi := DocAll.Tags('LI') as IHTMLElementCollection;

for i := 0 to DocLi.length-1 do
begin
DocElement := DocLi.Item(i, 0) as IHtmlElement;
ParentElement := DocElement.parentElement;

if ParentElement.className = 'posts' then
Memo.Lines.Add(DocElement.innerHTML);
end;
end;
end;


В результате получаем такую картину:



После парсинга первоначального списка обнаружились некоторые ньюансы. А именно: записи, имеющие слишком длинные названия, обрезаются по количеству символов (на рисунке для примера я обвела красным ссылку и пример заголовка одного из таких сообщений). Но это не страшно и вопрос решается очень просто: надо скачать страницу по ссылке и достать из html-кода полный заголовок (внутри h3 с classname = 'post-title entry-title'). В принципе, я думаю, что данная процедура необязательна, так как карты сайтов используются в основном поисковиками. Тем более, что если записей в блоге очень много — это мероприятие может оказаться затратным :)



Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Статьи схожей тематики:



10 комментариев:

  1. весьма интересно, хотя в блоггере вроде бы и так можно через API получить sitemap....

    и спасибо за блог - подписался и буду сегодня читать "от корки до корки" ;)

    ОтветитьУдалить
  2. Да, наверняка есть API, я не искала) Но блог о парсинге — поэтому привела такой пример, чтобы не ходить далеко))

    ОтветитьУдалить
  3. А почему бы не пользоваться http://red-slider.blogspot.com/feeds/posts/default?alt=rss
    как картой сайта?
    Соответственно red-slider замените на название вашего блога

    ОтветитьУдалить
  4. pori, потому что RSS — это не карта сайта по определению %)

    ОтветитьУдалить
  5. Andrey K

    а что значит можно через API получить sitemap? это какой-то виджет? можете подробнее подсказать?
    заранее спасибо..

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

    @Мария,
    и еще.. вы меняетесь ссылками? мой блог близкой тематики. - можем обменяться постовыми или обзорами
    блог http://sdelaisite.blogspot.com/

    ОтветитьУдалить
  6. Даниил, про нужность карты блога и ее "полезность" для поисковиков я точно не скажу. Я придерживаюсь мнения, что она нужна, но являюсь сторонником "интеллектуальной" карты, т.е. когда автор блога вручную систематизирует материалы и оформляет их в виде содержания. Но у самой руки до того, чтобы сделать такую карту, не доходят.)

    По поводу ссылок - обмениваюсь, но предпочитаю блоги с ненулевыми показателями.

    P.S. сори за запоздалый ответ, была в отпуске.

    ОтветитьУдалить
  7. @Masha,

    а можете привести пример "интеллектуальной" карты сайта или блога? т.е. это некая страница в блоге - где гиперссылками вы вставляете очередной свой пост в какую-то рубрику? или я что-то не так понимаю ?

    ОтветитьУдалить
  8. Даниил, именно так. Например, мне очень нравится, как содержание сайта оформлено у Андрея Морковина.

    ОтветитьУдалить
  9. @Masha,,

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

    т.к. в блоге постоянно появляются новые посты и их куда-то нужно постить.. - а не будет ли эта страница блога рассматриваться поисковиком как линкопомойка?

    ОтветитьУдалить
  10. Ну да, это зависит от еще от тематики блога. Если блог широкой тематики и содержит множество постов - будет проблематично. Но для моего блога как раз подходит такой вариант.

    Поисковики "в курсе" про карты сайтов и не будут их рассматривать как линкопомойки, имхо.

    ОтветитьУдалить

Комментарии модерируются, вопросы не по теме удаляются, троллинг тоже.

К сожалению, у меня нет столько свободного времени, чтобы отвечать на все частные вопросы, так что, может, свой вопрос лучше задать на каком-нибудь форуме?

Поделиться