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

среда, 13 января 2010 г.

Добавление и удаление узлов (вершин) в XML в Delphi (с использованием компонента TTreeView)

Приветствую всех подписчиков и читателей блога "Парсинг от А до Я"! Поздравляю с прошедшими праздниками и желаю в новом году терпения и усердия на пути к достижению поставленных целей. Надеюсь, что вы так же, как я, набрались сил и наполнились энтузиазмом за эти каникулы.

Сегодня появилось немного свободного времени, и я решила посвятить его развитию блога. Итак, проанализировав запросы, по которым приходят на этот ресурс, я решила дополнить его статьей о работе с XML в Delphi. Я уже затрагивала этот вопрос в материале "Отображение XML в виде дерева (TreeView): Delphi". К сожалению, тогда была невнимательной и как-то упустила комментарии о том, что в листинге отображены не все процедуры. В этот раз постараюсь исправиться и наряду с объяснениями выложить исходники того, о чем пойдет речь.

Итак, в той статье было описано отображение XML в TTreeView. А сейчас попытаемся сделать из просмотрщика редактор XML. Не сразу, постепенно. Понимаю, что как таковой самописный редактор XML вам не понадобится, тем более, что в сети можно найти много бесплатных утилит с полным набором требуемых функций, но новичкам будет полезно посмотреть, как сделать это своими руками. Вдруг в каком-нибудь вашем проекте вы решите поработать с XML... Собственно, я и решила написать этот пост про XML, так как стала переделывать RSSAdder: он будет работать не с ini-файлом, а с xml, и пользователям не придется совершать пляски с бубном, чтобы добавить в список новый агрегатор или изменить настройки у существующего.

На первом этапе добавим возможность добавлять узлы на один уровень с выбранным и дочерние узлы. Для этого поместим на форму соответствующие кнопочки и создадим экшэны со следующими обработчиками.

четверг, 24 декабря 2009 г.

Парсинг findarticles.com - part 2

Итак, следуя инструкциям в предыдущем посте, мы получили список ссылок на статьи. Теперь переходим к самому интересному на мой взгляд — к парсингу текста. Это интересно, но вместе с тем и трудоемко. Бывают ресурсы, на которых все легко и просто разбирается. А бывают и такие, на которых нужно быть внимательной и не полениться просмотреть выборку после первого запуска: вылазят некоторые неучтенные детали, которые нужно дополнительно обработать.

Ресурс findarticles.com как раз поможет мне продемонстрировать ход "изысканий" :)

Открываем любую статью и тщательно вглядываемся в код.

Как я уже писала, есть два основных способа "добычи" данных из html: применение регулярных выражений и разбор DOM-модели. Наверное, для практики стоит разобрать оба.

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

среда, 18 ноября 2009 г.

Парсинг findarticles.com - part 1

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

Для этих ключевиков, допустим, нам понадобится собрать статьи, им соответствующие (хотя бы отдаленно). Какие-нибудь, без разницы. Я покажу как это сделать, например, с ресурса findarticles.com. Это агрегатор, он сам тянет материал из всевозможных источников, так что от него не убудет :)

Ставим себе задачу.
Имеем: список ключевиков.
Требуется: получить набор текстовых статей. Дополнительное требование: чтобы в каждой статье было не менее определенного числа символов. Это требование возникло из-за того, что на данном агрегаторе много всякого "мусора", могущего состоять из одной строчки, например. А такого добра нам не надо, сразу отсечем этот вариант.

Рассмотрим алгоритм. Можно представить его в двух формах. Первый вариант - это вариант-монолит. То есть в цикле проходим по ключевикам, по каждому ключевику проходим по страницам, попутно на каждой странице собирая статьи. Этот вариант для парсинга большого ресурса не подходит из-за того, что требует стабильности связи на большое время. К тому же потребуется организовать несколько дополнительных настроек, чтобы при повторном запуске скрипт начал парсить не с самого начала, а с того места, на котором остановился.

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

Для парсинга такого большого ресурса, как findarticles, безусловно, лучше выбрать второй алгоритм, что и сделаем.

Поделиться