Парсинг С mail новости

Тема в разделе "Как сделать...", создана пользователем Lexa219, 27 ноя 2011.

  1. Lexa219

    Lexa219 Постоялец

    Регистр.:
    25 окт 2007
    Сообщения:
    105
    Симпатии:
    22
    Народ помогите сделать , найти скрипт парсинга со страницы news.mail.ru , для парсинга мне нужны строки с данными ( Курс валют, индекс цен ) Заранее спасибо , кстати имеется рабочий пример , только парсит с cbr , а мне нужны с mail , так как там есть индекс цен ..
    Вот рабочий код парсинга ( cbr )
    PHP:
    <?   
    //задаем путь к файлу кеширования 
    $cache_file "./cache/currency.cache"
    # Базовый URL скрипта на cbr.ru 
    $scripturl 'http://www.cbr.ru/scripts/XML_dynamic.asp'

    # Начальная дата для запроса  (сегодня - 2 дня(-172800) или 3 дня (-259200) или 9 дней(-777600)) 
    $date_1=date('d/m/Y'time()-259200); 

    # Конечная дата (чтобы учитывать завтра добавьте параметр time()+86400) 
    $date_2=date('d/m/Y'time()+86400); 

    # Таким образом, мы получим данные либо за 2, либо за 3 последних дня. 
    # За 2 - если на "сегодня" курс еще не выставили, иначе - за 3 

    # Код валюты в архиве данных cbr.ru 
    $currency_code = array('R01235''R01239'); 
    $currency_name = array('$''€'); 
    if(
    mktime() >= mktime(100date("m"), date("d"), date("Y")) && @filemtime($cache_file) < mktime(0010date("m"), date("d")-1date("Y"))) 
    {for(
    $j=0$j<count($currency_code); $j++){ 
        
    # URL для запроса данных 
        
    $requrl "{$scripturl}?date_req1={$date_1}&date_req2={$date_2}&VAL_NM_RQ={$currency_code[$j]}"

        
    $doc file($requrl); 
        
    $doc implode($doc''); 

        
    # инициализируем массив 
        
    $r = array(); 

        
    # ищем <ValCurs>...</ValCurs> 
        
    if(preg_match("/<ValCurs.*?>(.*?)<\/ValCurs>/is"$doc$m)) 
            
    # а потом ищем все вхождения <Record>...</Record> 
            
    preg_match_all("/<Record(.*?)>(.*?)<\/Record>/is"$m[1], $rPREG_SET_ORDER); 

        
    $m = array();    # его уже использовали, реинициализируем 
        
    $d = array();    # этот тоже проинициализируем 

        # Сканируем на предмет самых нужных цифр 
        
    for($i=0$i<count($r); $i++) { 
            if(
    preg_match("/Date=\"(\d{2})\.(\d{2})\.(\d{4})\"/is"$r[$i][1],$m)) { 
                
    $dv "{$m[1]}/{$m[2]}/{$m[3]}"# Приводим дату в норм. вид 
                
    if(preg_match("/<Nominal>(.*?)<\/Nominal>.*?<Value>(.*?)<\/Value>/is"$r[$i][2], $m)) { 
                    
    $m[2] = preg_replace("/,/",".",$m[2]); 
                    
    $d[] = array($dv$m[1], $m[2]); 
                    } 
                } 
            } 

        
    $last array_pop($d);                # последний известный день 
        
    $prev array_pop($d);                # предпосл. известный день 
        
    $date $last[0];                    # отображаемая дата 
        
    $rate sprintf("%.2f",$last[2]);        # отображаемый курс 
        # отображаемое изменение курса, например, "+0.02" 
        
    $delta = (($last[2]>$prev[2])?"<img src='/templates/_default_/images/up_c.gif' border='0' alt=''>":"<img src='/templates/_default_/images/do_c.gif' border='0' alt=''>").sprintf("|%.2f",$last[2]-$prev[2]); 
          
         
         
    $string $string."{$rate}|{$delta}|"
         @
    unlink($cache_file); 
            
    $fp = @fopen($cache_file'x'); 
            
    fwrite($fp$string); 
            
    fclose($fp); 


    $fp fopen($cache_file'r'); 
    $dat fread($fpfilesize($cache_file)); 
    fclose($fp); 
    $content explode("|"$dat);
                    

    $curs .="<table border='0' cellspacing='0' cellpadding='0' align='left' id='courses'>
    <tr valign='middle'>
    <td colspan='2' height='24'><br><div class='tm2'>Курсы валют</div></td>
    <td colspan='3'><br><div class='lrg' style='padding-right:0px; padding-top:0px;'></div></td>
    </tr>
    <tr valign='middle' align='center'>
    <td width='64' height='24'><img src='/templates/_default_/images/dollar.gif' border='0' alt='' style='margin-left:26px; margin-right:25px;'></td>
    <td width='25%'>
    $content[0] руб</td>
    <td width='25%'>
    $content[1]</td>
    <td width='25%'>
    $content[2]</td>
    </tr>
    <tr valign='middle' align='center'>
    <td height='24'><img src='/templates/_default_/images/euro.gif' border='0' alt=''></td>
    <td>
    $content[3] руб</td>
    <td>
    $content[4]</td>
    <td>
    $content[5]</td>
    </tr></table>"
    ;

    echo 
    $curs
    ?>
     
  2. x714

    x714 Создатель

    Регистр.:
    24 фев 2009
    Сообщения:
    18
    Симпатии:
    2
    Все довольно быстро и легко пишется с использованием такой замечательной фишки как curl.

    Пример парсинга новостей с yandex-а:Перейти по ссылке