помогите доработать граббер

Тема в разделе "PHP", создана пользователем Altair-Z, 2 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Altair-Z

    Altair-Z Создатель

    Регистр.:
    10 май 2010
    Сообщения:
    30
    Симпатии:
    1
    Ситуация:
    Есть элементарный грабер:
    PHP:
    <?php
    $url 
    "http://урл_откуда_грабить";
    $unique_start "<h3>";
    $unique_end "</h3>";
    function 
    weather($url,
    $unique_start$unique_end);
    {
    $code file_get_contents($url);
    preg_match('/'.preg_quote($unique_start, ('/').'(.*)'.preg_quote($unique_end'/').'/Us'$code$match);
    return 
    $match[1];
    }
    echo 
    weather($url$unique_start$unique_end);
    ?>
    где урл - страница а Н3 и /Н3 теги между которыми читать
    вопрос - как сделать так чтобы скрипт граббил с нескольких урлов (до 5000) вида Site.ru/1.html site.ru/2.html и дальше?
    Зараннее благодарен
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    есть специальные теги PHP - которыми нужно обрамлять пхп-шный код, дабы его можно было легко читать

    (PHP)
    здесб пхп - код, и скобки квадратные
    (/PHP)

    вы используете ф-цию preg_match, а есть еще preg_match_all - ею и воспользуйтесь
     
  3. Altair-Z

    Altair-Z Создатель

    Регистр.:
    10 май 2010
    Сообщения:
    30
    Симпатии:
    1
    благодарю, но я не совсем понял описание по ссылке. Можно конкретнее?
    Дело в том , что после граббинга вместо echo каждая страница будет записываться в базу данных.
     
  4. djamil

    djamil Постоялец

    Регистр.:
    25 авг 2008
    Сообщения:
    74
    Симпатии:
    16
    Закидываешь в текстовый файл список урлов, потом все эти ссылки загоняешь в массив и с помощью цикла перебираешь все страницы
     
  5. Altair-Z

    Altair-Z Создатель

    Регистр.:
    10 май 2010
    Сообщения:
    30
    Симпатии:
    1
    А можно сделать так чтобы через форму ввести site.ru а скрипт сам переберал site.ru/1.html site.ru/2.html и т.д.?
    Если можно, подскажите, как это реализовать.
     
  6. djamil

    djamil Постоялец

    Регистр.:
    25 авг 2008
    Сообщения:
    74
    Симпатии:
    16
    Все страницы будут по типу site.ru/1.html, site.ru/2.html, site.ru/3.html?
    Опять же с помощью цикла, просто подставляй цифру.
    А если хочешь спарсить ссылки со страницы, то тут уже больше нюансов, например как внешние ссылки и тд.
     
  7. Altair-Z

    Altair-Z Создатель

    Регистр.:
    10 май 2010
    Сообщения:
    30
    Симпатии:
    1
    да, все страницы такого вида.
    Нет, на страницах будет только текст. Никаких ссылок

    мысль я уловил, но одна проблема - я немного понимаю в десктопных языках, а в РНР я полный нуб)
    вы не могли бы код приводить?
     
  8. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Вот
    PHP:
    define('MAX_STR'5000);
    define('MAIN_URL''http://site.ru');
    $unique_start "<h3>"
    $unique_end "</h3>"
    for(
    $i=1$i<=MAX_STR; ++$i){
        
    // http://site.ru/1.html .. http://site.ru/5000.html
        
    $url =  MAIN_URL.'/'.$i.'.html';
        
    $content weather($url$unique_start$unique_end);
        
    // тут надо что-то делать с полученными данными
    }
    function 
    weather($url$unique_start$unique_end){ 
        
    $code file_get_contents($url); 
        
    preg_match('/'.preg_quote($unique_start'/').'(.*)'.preg_quote($unique_end'/').'/Us'$code$match); 
        return 
    $match[1]; 

     
    Но, если шаблон не подойдёт- weather ничего не вернёт.
     
  9. komyak

    komyak

    Регистр.:
    4 фев 2009
    Сообщения:
    481
    Симпатии:
    182
    PHP:
    <?php
    $ot 
    '<div class="sectionbox">';// ОТ
    $do '</div>'//ДО

    $c 4//Количество страниц

    for( $i 1$i <= $c$i++ ) {
            
    $html file_get_contents'http://inform-seo.ru/php/4-' $i '.html' );
            
    preg_match_all'|' $ot '(.+?)' $do '|is'$html$txt );
            echo 
    $txt[1][0];


    ?>
    Altair-Z, универсальных парсеров не существует. Всё равно нужно под каждый сайт отдельно настраивать- и регулярки, и вывод, и сохранение.

    А парсер попробуйте запустить в том виде как он есть =)) Хорошее пособие. =)
    А так бы дали ссылку на ресурс, тут программёров много, кто-как но поможем.

    Добавлено через 2 минуты
    Гы.. Не успел... =)) KillDead, ща он с дефайнами вообще умрёт... =))
     
  10. Altair-Z

    Altair-Z Создатель

    Регистр.:
    10 май 2010
    Сообщения:
    30
    Симпатии:
    1
    KillDead
    спасибо, работает, за исключением одного.
    Можно как-то кроме изменения значения в дефайне сделать так чтобы если страниц меньше 5000 он не выплевывал ошибки?
     
Статус темы:
Закрыта.