Ресурс findarticles.com как раз поможет мне продемонстрировать ход "изысканий" :)
Открываем любую статью и тщательно вглядываемся в код.
Как я уже писала, есть два основных способа "добычи" данных из html: применение регулярных выражений и разбор DOM-модели. Наверное, для практики стоит разобрать оба.
В этой статье разберем, как это делается с помощью регулярных выражений. Увидим, что этот путь может быть извилист и тернист, и сопряжен с некоторыми неудобствами в связи с необходимостью дополнительного анализа и чистки результатов.
Для начала — алгоритм "с высоты птичьего полета", в общих чертах. В качестве входных данных будем использовать файл с ссылками, полученный в результате запуска скрипта, описанного в первой части инструкции. Нам понадобится в процессе работы еще один список, в котором мы будем хранить ссылки, по которым уже прошлись. Это надо для удобства: чтобы не делать повторно одну и ту же работу, когда процесс парсинга разбивается (преднамеренно или случайно) на несколько частей.
Итак, по очереди берем из списка ссылку, проверяем, не парсили ли ее. Если парсили — переходим к следующей. Если не парсили — парсим. Скачиваем содержимое, выдираем :) основное, чистим, записываем в файл. У меня запись проводилась так: создается папка по с заданным ключевиком в качестве названия, в ней создаются файлы с названиями, соответствующими названиям статей. В файл записываю данные в следующем виде:
[TITLE]
Заголовок
[/TITLE]
[CONTENT]
Текст
[/CONTENT]
Вот, в общем-то, и все. Теперь переходим к самой муторной части работы — к обработке данных.
В html-коде страницы наблюдаем наличие тегов распределения "веса значимости" контента для Google AdSense (google_ad_section_start, google_ad_section_end). Я поступлю следующим образом: в качестве основы для обработки возьму содержимое, расположенное внутри этих тегов.
Составляю регулярку, склеиваю части, получаю "черновой материал".
$text_pattern = '#<!--\sgoogle_ad_section_start.*?-->[\n\s]+(.*?)[\n\s]+<!--\sgoogle_ad_section_end.*?-->#ism';
if (preg_match_all($text_pattern,$html,$text_matches, PREG_SET_ORDER))
{
$res_text = '';
foreach($text_matches as $val)
{
$res_text = $res_text.$val[1];
}
}
Подчеркну, что для чистки кода необходима внимательность и несколько страниц для тестов. Бывает, когда парсинг делается впопыхах, остается незамеченным мусор, который мы можем потом видеть на сайтах. Как пример, легко нашла в гугле по строчке из кода сайт, наполняемый материалами с findarticles.com. На скрине видно допущенные программистом ляпы.
Итак, первоначальные данные надо почистить. Я не буду описывать все действия поштучно, все будет видно в листинге. В статье я листинг не привожу, скачивайте и смотрите, постаралась максимально подробно прокомментировать код. Вкратце отмечу, что пришлось "вычистить" лишние дивы, такие, как, например, этот:
отформатировать немного абзацы, убрать лишние пробелы.
В архиве полная сборка скриптов (вместе с первой частью). Настройки (ключевик и т.д. по мелочам) в файле config.php. Если найдете какие-нибудь баги — пишите :) Надеюсь, вы понимаете, что эти скрипты можно рассматривать просто как учебный пример, а не как истину в последней инстанции :) Пробуйте, дорабатывайте, читайте в интернете другие статьи про парсинг. Все ваши усилия даром не пропадут, и вы легко потом сможете сделать то, что вынесено в подзаголовок моего блога — написать свой парсер :)
Как я уже сказала, результатом будет набор файлов в папке с названием ключевика:
___
Пламенный привет и благодарность за обзоры авторам Блога SEO-отшельника и блога "Истина где-то рядом" :) Все никак не могу собраться и выложить новый конфиг RSSAdder-а, но в моих планах это записано.
___
Чтобы быть в курсе обновлений блога, можно подписаться на RSS.
Мария, шикарный парсер, очень все здорово! Но я знаю гораздо более шикарное место "бесплатных статей" - articlesbase.com судя по alexa rank посещаемость у него гораздо больше, и материала возможно больше. У этого сайта нет блокировки от большого числа запросов как у ezinearticles. Скажите сильно много надо переделать в вашем парсере под articlesbase.com, это реально сделать чайнигу самостоятельно?
ОтветитьУдалитьАнонимный, думаю, что проблем не должно возникнуть :) В крайнем случае - можно и подучиться, чтобы не быть совсем уж "чайником". Мне кажется, что в статьях я достаточно подробно все описываю...
ОтветитьУдалить