Чтобы знать о человеке многое, достаточно владеть немногим...

Парсер php

Создано: Август 5th, 2011 | Автор: | Рубрика: php | Теги: php, скрипт | 3 комментариев»

Никогда не задумывался как работают парсеры, например тот же Content Downloader. Все ведь о нем слышали? Выбирал диапазоны, вводил ссылки и был доволен. До этого вообще на фрилансе заказывал и тоже был доволен. Решил разобраться, что да как на самом деле…
А оказывается все очень просто! Написать простенький парсер не составит труда, даже начинающему программисту. А немного смекнув, то можно и на постоянке, например раз в день, мониторить новые новости где-нить на сайте.

set_time_limit (0);

function get_content($url, $start, $end)
{
  $code = file_get_contents($url);
  preg_match('/'.preg_quote($start,'/').'(.*)'.preg_quote($end, '/').'/Us', $code, $match);
  return $match[1];
}

function win2utf($str)
{
  $utf = "";
  for($i = 0; $i < strlen($str); $i++)
  {
    $donotrecode = false;
    $c = ord(substr($str, $i, 1));
    if ($c == 0xA8) $res = 0xD081;
    elseif ($c == 0xB8) $res = 0xD191;
    elseif ($c < 0xC0) $donotrecode = true;
    elseif ($c < 0xF0) $res = $c + 0xCFD0;     else $res = $c + 0xD090;     $c = ($donotrecode) ? chr($c) : (chr($res >> 8 ) . chr($res & 0xff));
    $utf .= $c;
  }
  return $utf;
}

function modify_str($str)
{
  $str = preg_replace('/<[\/]?a[^>]*>/i', '', $str);
  $str = preg_replace('/\/images/', 'http://www.hardnsoft.ru/images', $str);
  $str = preg_replace('/\s<\/SPAN>/', '', $str);
  $str = preg_replace('/\s<\/o:p>/', '', $str);
  $str = preg_replace('/\s<\/P>/', '', $str);
  $str = preg_replace('/\xBB/', '"', $str);
  $str = preg_replace('/\xAB/', '"', $str);
  $str = preg_replace('/\x97/', ' - ', $str);
  $str = win2utf($str);
  return $str;
}

$i=14005;
$title_start = '

';
$title_end = '

';
$text_start = '
'; $text_end = '
'; do { $url = "http://www.hardnsoft.ru/?trID=70&artID=".$i; $title = get_content($url, $title_start, $title_end); $content = get_content($url, $text_start, $text_end); if (!empty($content)) { $title = modify_str($title); echo '

'.$title.'

'; $content = modify_str($content); echo ' '.$content.' '; echo '
'; } $i++; } while ($i <= 14200);

Итак, по порядку. set_time_limit — можете погуглить, задаем время для работы скрипта (0 — бесконечно).

get_content($url, $start, $end) — сам парсер по сути, ф-я выдирает по заданному УРЛ-у все между тегами $start и $end. Результат попадает в массив и возвращается ф-ей.

Что там дальше — ф-я win2utf! Тут все понятно, ф-я переводит строку в utf-8. На сайте, который грабил в качестве примера, оказалась win-1251, которую я не перевариваю.

Ф-я modify_str — личное дело каждого. 1 строкой мы убираем все ссылки из текста, второй дописываем путь к изображениям, а всеми остальными чистим кракозябры, оставшиеся после чудесного превращения win-1251 в utf-8. Кстати, если кто знает как безболезненно переводить из одной кодировки в другую — помогите!!! :)

Ну и все, вся соль. Далее задаем границы для заголовка, для самого текста и на примере категории Процессоры на сайте http://www.hardnsoft.ru/?trID=70&artID=ХХХХ заводим счетчик и перебираем все УРЛ-ы.

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

Чувствую, пост ни о чем… Зато в этом разобраться куда проще, чем в том же Content Downloader’е — лично у меня ушло около часа, а сварганить скрипт 20 минут. Думайте сами, решайте сами… :)

Рассказать друзьям:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • MySpace
  • Одноклассники
Просмотров: 1 291

3 комментариев к “Парсер php”

  1. 1  сказал в 12:33. Февраль 1st, 2012:

    Спасибо, действительно не сложно. А то я через PHP Simple HTML DOM Parser пытался, так там чёрт ногу сломает…

  2. 2 unknow сказал в 09:10. Февраль 2nd, 2012:

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

  3. 3  сказал в 18:21. Март 3rd, 2012:

    Я курлом пытался анкеты в моём мире на майл.ру парсить… Ничего не вышло…


Оставить ответ