PHP парсер контента со страницы сайта

Тема в разделе "PHP", создана пользователем kreator, 9 апр 2012.

Модераторы: latteo
  1. kreator

    kreator Создатель

    Заблокирован
    Регистр.:
    18 июн 2011
    Сообщения:
    113
    Симпатии:
    6
    Наткнулся на интересный и с виду простой скрипт:
    Код:
    <?
    //-----------------------------------------------------------
    // Граббер цитат с Цитатника Рунета bash.org.ru
    // Загружает и парсит главную страницу, цитаты помещает в массив
    //-----------------------------------------------------------
    // Получить html-страницу
    $grab=@file_get_contents("http://bash.org.ru");
    if ($grab) {
    // Заменить теги переноса строки на простые переносы строки
    $grab=str_replace("<br>","\n",$grab);
    // Получить регулярным выражением тексты цитат
    preg_match_all("/<div class=\"vote\">([^>]*>){12}([^<]*)/",$grab,$matches);
    // В массиве содержатся все найденные строки
    for ($i=0; $i<count($matches[2]); $i++) {
    echo nl2br($matches[2][$i]);
    echo '<hr>';
    }
    }
    else {
    echo "Connection Error";
    } 
    Но он к сожалению не работает ... Может кто подскажет почему?
    Собственно раз на примере баша попался скрипт на его примере и спрошу.

    Нужно сграбить таким образом контент с некой страницы.
    Допустим заключен этот контент на странице в тег <div class="text">ТУТ КОНТЕНТ</div>
    Так контент заключен и на БAIIIE.
     
  2. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Редирект во первых с
    http://bash.org.ru на http://bash.im


    Во вторых
    <div class=\"vote прописано а нужно
    <div class=\"text
     
  3. kreator

    kreator Создатель

    Заблокирован
    Регистр.:
    18 июн 2011
    Сообщения:
    113
    Симпатии:
    6
    Ни во первых, ни во вторых, никак ...
    Думал может защита какая, пробовал другой сайт - то же самое.
    p.s. Хостинг позволяет выполнять данные команды. (думаю будет такой вопрос)
     
  4. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Юзай

    PHP:
    <html>
    <head></head>
    <body>
    <?php
    function browser($url) {
    $url="http://bash.im/";
    $ch curl_init($url);
    curl_setopt($chCURLOPT_URL,$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html curl_exec($ch);
    curl_close($ch);
    return 
    $html;
    }
    preg_match_all('~<div class="text">(.*?)</div>~is'browser($url), $text);
    print 
    implode('<br />'array_slice($text[1], 03)); //выводит первые три цитаты
    ?>
    </body></html>

    [​IMG]
     
    kykc, judex и kreator нравится это.
  5. kreator

    kreator Создатель

    Заблокирован
    Регистр.:
    18 июн 2011
    Сообщения:
    113
    Симпатии:
    6
    Шакарно, буду изучать недры необъятного пхп.

    Немного решив доработать код:
    Код:
    <html>
    <head></head>
    <body>
    <?php
    $page = $_GET['page'];
    function browser($url) {
    $url="http://bash.im/quote/1";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
    }
    preg_match_all('~<div class="text">(.*?)</div>~is', browser($url), $text);
    $base=implode('<br />', array_slice($text[1], 0, 1));
    print $base;
    print $page;
    ?>
    </body></html>
    Изменив строку $url с главной страницы на первую цитату и $base=implode('<br />', array_slice($text[1], 0, 1));
    код выводит одну единственную первую цитату.
    Добавил переменную передаваемую $page передаваемую GET.
    Собственно переменная хорошо передается сайт.ру/скрипт.пхп?page=1
    Голову сломал как прикрутить эту переменную в строку $url.
    PHP:
    $url="http://bash.im/quote/$page";
    не катит.
    Простите, может для вас гуру кажется глупости спрашиваю, но мне реально помогает - хорошо обучают ваши решения.
    Спасибо огромное за помощь.
     
  6. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Так или не так?

    PHP:
    <html>
    <head></head>
    <body>
    <?php
    $page 
    $_GET['page'];
    function 
    browser($url) {
    $url "http://bash.im/quote/" .$_GET['page'];
    $ch curl_init($url);
    curl_setopt($chCURLOPT_URL,$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html curl_exec($ch);
    curl_close($ch);
    return 
    $html;
    }
    preg_match_all('~<div class="text">(.*?)</div>~is'browser($url), $text);
    $base=implode('<br />'array_slice($text[1], 01));
    print 
    $base;
    print 
    $page;
     
    ?>
    </body></html>
     
  7. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Думать не умею... Сделал рандомно. :D
    По аналогии или по другому сделаешь себе. Уже спать хочу.

    PHP:
    <html>
    <head>
    </head>
    <body>
    <?php
    $page 
    $_GET['page'];
    function 
    browser($url) {
    $url "http://bash.im/quote/" .$_GET['page'];
    echo 
    "<meta http-equiv=refresh content=\"3; url=1.php?page=".rand(0,500)."\">"//3 секунды и обновление, заменить имя файла/скрипта на свое 1.php, 500 страниц в рандоме
    $ch curl_init($url);
    curl_setopt($chCURLOPT_URL,$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html curl_exec($ch);
    curl_close($ch);
    return 
    $html;
    }
    preg_match_all('~<div class="text">(.*?)</div>~is'browser($url), $text);
    $base=implode('<br />'array_slice($text[1], 01));
    print 
    $base;
    ?>
    </body></html>