ФорумПрограммированиеPHP для идиотов → Парсинг Яндекса. Пинаем новичка)

Парсинг Яндекса. Пинаем новичка)

  • Николай_П

    Сообщения: 74 Репутация: N Группа: Кто попало

    Spritz 29 января 2010 г. 15:41

    Учусь "Парить Яндекс") Хочу извлечь стоимость телефона Nokia 6303 с Яндекс.Маркета

    Сначала пробую загрузить страничку с Яндек.Маркет
    $content = file_get_contents('http://market.yandex.ru/model.xml?hid=91491(8)modelid=3995344');
    echo $comtent;

    (8) - значок and. У меня почему-то он игнорируется и обрывает пост.

    на это мне выдают:
    Warning: file_get_contents(http://market.yandex.ru/model.xml?hid=91491(8)modelid=3995344) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /storage/home/srv11142/htdocs1/1.php on line 13

    Как я понял на прямую с эту страничку не получается загрузить. Тогда решил обмануть Яндекс)
    Создаю файлик "iframe.php" с кодом:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>

    <body>
    <iframe src="http://market.yandex.ru/model.xml?hid=<? echo $_GET['hid']; ?>(8)modelid=<? echo $_GET['modelid']; ?>" width="100%" height="100%">
    </body>
    </html>


    Одним словом гружу страничку с содержанием яндекса в свой iframe.
    Затем создаю другой файлик "parser.php" со следующим кодом:
    $main_url = 'http://prokopov-nikolai.ru/iframe_yandex.php?';
    $hid = '91491';
    $modelid = '3995344';

    $content = file_get_contents($main_url.'hid='.$hid.'(8)modelid='.$modelid);
    preg_match('#<div class="price">(.*)</div>#iU', $content, $price);
    echo ($price[0]);
    echo $content;


    смотрю в браузере результат и вижу, только что вывелось содержимое контекта. А содержимое дива с классом прайс не найдено. Тогда я подумал, что возможно не правильно использовал функцию с регулярным выражением и попробовал контенту задать свое содержание:
    $main_url = 'http://prokopov-nikolai.ru/iframe_yandex.php?';
    $hid = '91491';
    $modelid = '3995344';

    $content = '<div class="prices price-inf"><div>Средняя цена: </div><div class="price"><span class="b-prices__num">5(8)nbsp;575</span><span class="b-prices__currency">(8)nbsp;руб.</span></div><span class="b-prices b-prices__range">от(8)nbsp;<span class="b-prices__num">5(8)nbsp;040</span> до(8)nbsp;<span class="b-prices__num">6(8)nbsp;590</span><span class="b-prices__currency">(8)nbsp;руб.</span></span></div>';
    preg_match('#<div class="price">(.*)</div>#iU', $content, $price);
    echo ($price[0]);


    И в результате все получилось. Вот результат "5 575 руб."

  • Николай_П

    Сообщения: 74 Репутация: N Группа: Кто попало

    Spritz 29 января 2010 г. 16:25, спустя 43 минуты 58 секунд

    Попробую переформулировать вопрос более сжато:
    У меня есть два контента, первый получен через iframe с яндекса, второй - сделал вырезку из первого.
    Вопрос: Почему во втором случае цена выводится, а в первом нет?
    Код второго случая:
    $content = '<div class="prices price-inf"><div>Средняя цена: </div><div class="price"><span class="b-prices__num">5(8)nbsp;575</span><span class="b-prices__currency">(8)nbsp;руб.</span></div><span class="b-prices b-prices__range">от(8)nbsp;<span class="b-prices__num">5(8)nbsp;040</span> до(8)nbsp;<span class="b-prices__num">6(8)nbsp;590</span><span class="b-prices__currency">(8)nbsp;руб.</span></span></div>';
    preg_match('#<div class="price">(.*)</div>#iU', $content, $price);
    echo ($price[0]);
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 января 2010 г. 16:42, спустя 16 минут 43 секунды

    ыыы. посетил =))))
    Спустя 31 сек.
    Учусь "Парить Яндекс")

    на пыхе материться можно, написал бы ебать/трахать
    Спустя 164 сек.
    Как я понял на прямую с эту страничку не получается загрузить. Тогда решил обмануть Яндекс)
    Создаю файлик "iframe.php" с кодом:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>

    <body>
    <iframe src="http://market.yandex.ru/model.xml?hid=<? echo $_GET['hid']; ?>(8)modelid=<? echo $_GET['modelid']; ?>" width="100%" height="100%">
    </body>
    </html>
    если я правильно понял, что было сделано, то я афигенно поржал только что :-D
    Спустя 37 сек.
    простите меня, но я невоспитанный программист, который придерживается только рамок мануала :)
    Спустя 67 сек.
    $content = file_get_contents('http://market.yandex.ru/model.xml?hid=91491(8)modelid=3995344');
    echo $comtent;
    2 строки, 8 ошибок …

    content != comtent
    Спустя 50 сек.
    подскажу -
    Warning: file_get_contents(http://market.yandex.ru/model.xml?hid=91491(8)modelid=3995344) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /storage/home/srv11142/htdocs1/1.php on line 13


    это изза отсутствия user-agent http заголовка
    Спустя 21 сек.
    ндекс не любит роботов почти так же, как я не люблю людей
    Сапожник без сапог
  • Николай_П

    Сообщения: 74 Репутация: N Группа: Кто попало

    Spritz 29 января 2010 г. 16:46, спустя 4 минуты 17 секунд

    Я вижу только одну ошибку
    content != comtent

    :-D

    Поделись опытом на счет остальных 7!
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 января 2010 г. 16:50, спустя 3 минуты 21 секунду


    Я вижу только одну ошибку
    content != comtent

    :-D

    Поделись опытом на счет остальных 7!
    7 я придумал, чтобы хотя бы первую нашли :)
    Спустя 38 сек.
    а чо у луппы палка оторвана от кружка?)
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 29 января 2010 г. 17:02, спустя 12 минут 3 секунды

    Николай_П, по первому случаю - юзай curl.
    Можешь библиотеку дуда взять:
    http://clear.helldude.ru/category/%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82-dudecurl/
  • Николай_П

    Сообщения: 74 Репутация: N Группа: Кто попало

    Spritz 29 января 2010 г. 17:09, спустя 7 минут 7 секунд

    Это не лупа, это я ПЫХЧУ над Яндексом )))))))))))))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 января 2010 г. 17:10, спустя 1 минуту 8 секунд


    Это не лупа, это я ПЫХЧУ над Яндексом )))))))))))))

    пыхтят над женой, это интереснее :)

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 29 января 2010 г. 17:17, спустя 7 минут 1 секунду


    пыхтят над женой, это интереснее :)
    причем, если жена чужая - это еще интересней. )))))))))))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 января 2010 г. 17:23, спустя 5 минут 52 секунды



    пыхтят над женой, это интереснее :)
    причем, если жена чужая - это еще интересней. )))))))))))
    тс …. =))
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 29 января 2010 г. 18:49, спустя 1 час 25 минут 47 секунд



    пыхтят над женой, это интереснее :)
    причем, если жена чужая - это еще интересней. )))))))))))
    :DDD как всегда жжошь :)
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 30 января 2010 г. 0:56, спустя 6 часов 7 минут 3 секунды



    пыхтят над женой, это интереснее :)
    причем, если жена чужая - это еще интересней. )))))))))))


    я вот уже подумываю нахуя я показал жене пыху =)))
  • Николай_П

    Сообщения: 74 Репутация: N Группа: Кто попало

    Spritz 30 января 2010 г. 1:05, спустя 9 минут 36 секунд

    Вот нашел примерчик. Если пробую выводить http://yandex.ru/ то все работает, а если http://market.yandex.ru/, то появляется просто пустая страница.

    Может кто прокомментировать?!

    function get_page($url) {
    //путь куда сохраняем файл с куками
    $user_cookie_file = 'cookies.txt';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    //– маскируемся под браузер
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2');
    //куки
    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
    //куки
    curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file);

    $html = curl_exec($ch);
    curl_close($ch);
    return $html; //Возвращаем результат
    }
    $content = get_page('http://yandex.ru');
    echo $content;
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 30 января 2010 г. 1:44, спустя 38 минут 54 секунды

    найдешь ответ ты в хидерах, о юный падаван.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 января 2010 г. 1:53, спустя 8 минут 44 секунды

    welder, моя девушка тоже читает иногда… даже на работе :)
    Спустя 176 сек.
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    тебя спасет…
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!