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

Статус
В этой теме нельзя размещать новые ответы.

terkin

Мой дом здесь!
Регистрация
9 Дек 2006
Сообщения
513
Реакции
200
Вобщем встетил на searchengines код для парсинга ПДА версии ЯК, и чуть его дописал что бы он парсил все страницы раздела и работал на РНР 4:
PHP:
<?
set_time_limit(0);
$cat = 'Computers/Internet/Catalogues/'; // указываем раздел который нужно парсить
$np_pat = '/<a target="_self" href="(.*)"><font color="#333333">след.<\/font><\/a>/U';
$yc_pat = '/<li>\n<font><a.*href="(.*)".*>.*<\/li>/isU';
$delay = '3';
$a=1;
$url = 'http://pda.yaca.yandex.ru/yca/tungrp/cat/'.$cat;
$data = file_get_contents($url);
$col=preg_match_all("!<h3>(.*?)</h3>!si",$data,$ok);
$col=substr($ok[0][0],strpos($ok[0][0],":")+1);
$col=trim($col);
$col_pages=$col/20;



for($i=0;$i<$col_pages;$i++)
{
$page=$i.".html";
$url = 'http://pda.yaca.yandex.ru/yca/tungrp/cat/'.$cat.$page;

while ($data = file_get_contents($url)) {
    #$data = iconv('utf-8', 'cp1251', $data);
    preg_match_all($yc_pat, $data, $o1, PREG_SET_ORDER);
    foreach ($o1 as $o) echo $a++.".".$o[1]."<br>"; flush();
    preg_match($np_pat, $data, $o2);
    $url = ($o2 ? $o2[1]:FALSE);

    sleep($delay);
}
}
?>
 
мне кажеться он либо усторел либо еще что то так как он не работает

у тебя может проблемма возникает из за отключеного на хосте set_time_limit, попробуй закоментировать эту строку set_time_limit(0);
 
подтверждаю - работает;
только дело может быть не только во времени,
возможен запрет обращаться по урлу в file_get_contents
а еще он дубли выдает
 
  • Заблокирован
  • #5
я на локалке выдал. написал что не может соедиться
 
  • Заблокирован
  • #6
Отлично работает !

Я запустил его на Денвере, так он мне мигом 220 ссылок на каталоги показал.
Жаль сохранять в ручную надо... Хотя это уже детали. :yahoo:
 
Может не работает потому, что много раз пробовали скрипт и яндекс запретил доступ?

я с таким сталкивался еще лет 5 назад...
 
подскажите , что изменить в скрипте чтобы он непроставлял номера сайтов
 
замени

foreach (
$o1 as $o) echo $a++.".".$o[1]."<br>"; flush();

на

foreach ($o1 as $o) echo $o[1]."<br>"; flush();
 
ТС, а можете дописать чтоб парсились только домены? без подкаталогов, страниц и т.д? Заранее благодарю.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху