Парсер яндекс каталога

Assembler, Basic, Pascal/Delphi, Perl, PHP, JavaScript, HTML и т.д. Вопросы и помощь.

Парсер яндекс каталога

Непрочитанное сообщение Я вас всех вижу » 19 фев 2008, 06:49:25

Парсер яндекс каталога. Требования: должен быть создан и доступен для записи каталог output - туда складываются сами сайты, так же
должен быть доступен для записи файл yaca.cash.
Запуск из командной строки -
php yaca.php _http://yaca.yandex.ru/path_to_yours_dir/
Кто шарит - помогите, не могу с ним ладу дать, толи я что не так делаю, то ли код кривоват.
yaca.php:
Код: Выделить всё
<?php
require_once('yacalib.php');

//---------------------------------------------------------
// очищаем кэш
h = fopen('yaca.cash','w');
fwrite(h, '');
fclose(h);
cash = glob('output/'.'*.txt');
foreach (cash as f)
{
  unlink(f);
}

if (!isset(argv[1]))
{
  die ("YACA parser.n Uses: n php yaca.php http://yaca.yandex.ru/yca/cat/Computers/Internet/Web_Development/");
}
url = argv[1];

echo "stage 1 n";
d = parse(url);
while (url=find_next_page(url))
{
  echo "stage 2 n";
  d = parse(url);
}
echo "stage 3 n";
get_sites('yaca.cash');
echo "stage 4 n";
get_mails();
?>


yaca.lib :

Код: Выделить всё
<?php
// ---------------------------------------------------------------------
// Функции для работы с яндекс каталогом
// (c) _www.jp-net.ru, pi11 icq 1447500
//
// требования: должен быть создан и доступен для записи каталог output
// должен быть доступен для записи файл yaca.cash
// ---------------------------------------------------------------------


function parse(url) // вытаскивает все ссылки на сайты со страницы каталога
{
  echo '.';
  urls = array(0=>0);
  i=0;
//  cat = file_get_contents(url);
  if (!(cat = file_get_contents(url))) {sleep (15); cat = file_get_contents(url);}
  str = explode ("n", cat);
  h = fopen('yaca.cash', 'a');
  foreach (str as s)
  {
    if (strpos(s, '<span style="color: rgb(0, 102, 0);">')===false){}
    else
    {
      i++;
      end = strpos(s, '</span>');
      fwrite(h,  'http://'.substr(s, 37, end - 37).'/'."n");
      //array_push(urls, 'http://'.substr(s, 37, end - 37).'/');
      //echo 'http://'.substr(s, 37, end - 37).'/';
      //echo url."n";
    }
  }
  fclose(h);
  return urls;
}
//-------------------------------------------------------------
function find_next_page(url) // возвращает ссылку на след. страницу каталога.
{
  r='';
  if (!(cat = file_get_contents(url))) {sleep (15); cat = file_get_contents(url);}

  str = explode ("n", cat);
  foreach (str as s)
  {
    if (strpos(s, '<span>&#8594;</span>')===false){}
    else
    {
      end      = strpos(s, '">');
      start    = strpos(s, 'href="');
      next_url = substr(s, start+6, end-start-6);
      r = next_url;
    }
  }
  if (strpos(r, 'yaca')===false){r=false;}
  sleep(6);
  echo '@';
  return r;
}
// ------------------------------------------------------------

function get_sites(fsites)
{
  set_time_limit(0);
  d = file_get_contents(fsites);
  d = explode("n", d);
  i=0;
  foreach (d as site)
  {
    i++;
    s = file_get_contents(site);
    h =fopen('output/'. i.".txt", 'w');
    content = file_get_contents(site);
    fwrite (h, site."nnn".content);
    fclose(h);
  }
}
// ------------------------------------------------------------
function get_mails()
{
  d = glob('output/'.'*.txt');
  h = fopen('mails.txt','w');
  foreach (d as f)
  {
    find = false;
    text = strtolower(file_get_contents(f));
    p  = strpos(text, 'mailto:');
    if (p === false)
    {
    //  echo f;
    } else
      {
        p2   = strpos(text,'.ru', p);
        //echo p2."-".p."n";
        mail = substr(text, p+7, p2-p+3-7 );
        if (strlen(mail)<100)
        {
          sss = explode("n",text);
          fwrite(h, sss[0]."n");
          fwrite(h, mail."nn");
          find = true;
        }
      } 
    if (!find)
    {
      sss = explode("n",text);
      fwrite(h, 'NOT FOUND E-mails: '.sss[0]."n");
    }
  }
  fclose(h);
  d = glob('output/'.'*.txt');
  foreach (d as f)
  {
    text = strtolower(file_get_contents(f));
    p  = strpos(text, 'mailto:');
    if (p === false)
    {
    //  echo f;
    } else
      {
        p2   = strpos(text,'.ru', p);
        //echo p2."-".p."n";
        mail = substr(text, p+7, p2-p+3-7 );
        if ((strlen(mail)<110) && (strlen(mail)>3))
        {
          sss = explode("n",text);
          echo sss[0]."n";
          echo mail."nn";
        }
      } 
  }
  }
?>
Я вас всех вижу
 

Вернуться в Программирование

Кто сейчас на форуме

Зарегистрированные пользователи: AhrefsBot [Bot], Bing [Bot], DotBot [Crawler], Google [Bot], SEMrush [Бот], Trendiction [Бот], Яндекс [Бот]