Распарсить pogoda_mail_ru

Тема в разделе "Регулярные выражения", создана пользователем Ser Frood, 24 авг 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Ser Frood

    Ser Frood Заблокирован

    Регистр.:
    12 дек 2006
    Сообщения:
    519
    Симпатии:
    384
    Народ может кто помочь распарсиить сабж))
    _http://pogoda.mail.ru/?city=1460&extended=1
    вида:
    Пн 24.08
    ночь (картинка) +12°
    утро (картинка) +16°
    день (картинка) +18°
    ....
    Вт 25.08
    ночь (картинка) +12°
    утро (картинка) +13°
    день (картинка) +14°
    ...
    Оч нуно)))
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Используй simplehtmldom http://simplehtmldom.sourceforge.net/

    Он тебе распарсит любую html страницу и представит тебе данные в удобном для тебя виде.
     
  3. Dudarik

    Dudarik Писатель

    Регистр.:
    18 авг 2009
    Сообщения:
    3
    Симпатии:
    0
    HTML:
    <!-- 24.08 Пн -->
    <td rowspan="4" class="bg_w blue" valign="top"><div class="date1"><a name="1" id="1"></a><span>Пн</span>
    ......
    <td nowrap>&nbsp;западный<div class="mb20"></div></td><td class="bg_r_2"></td></tr>
    <!-- 25.08 Вт -->
    ......
    В принципе, mail.ru уже помог нам тем что указывает комментариями в HTML коде дни недели, все что находится между комментариями вида: <!-- чч.мм дн --> это и есть погода на один день остается лишь "вытащить" ее отуда. Как вариант ориентироваться по классам стилей. Скажем у дня недели class="date1"(date2), у времени суток class="bg_w s_grey" ну и т.д. И на основе этого составлять рег. выражения.
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Если ещё нужно.
    Табица там не очень хорошая- парсить не сложно, но геморойно. Ибо куй разберёшся в нагромждении стилей, разметки, классов.
    2tostrss
    Я пробовал поюрзать этот класс, но при обработке большого текста он вдруг начал жрать всю память:nezn:, я не стал разбираться и перешёл на jquery. Иногда и он не подходит из-за нарушенной разметки:confused:


    Можно конечно распарсить по классам и ид, но гораздо прощее
    PHP:
    require_once 'phpQuery.php';
    $results phpQuery::newDocument($Q);   
    $elements $results->find('table.weath_p.mb15 > tr');//получаем все строчки из талицы с погодой
     
     
    $return_array= array();  
     
    $i=0;
    foreach (
    $elements as $element){   
     
     if(!
    $i ){ // первая строка - шапка
      
    $i++;continue;
     }
     
    $tr_content=  pq($element)->html();
     
    preg_match_all('#<td.*?>(.*?)</td>#is'$tr_content$tr_arr);
     
    //print_r($tr_arr); просто получаем содержимое строк
     
    if(substr_count($tr_content'<div class="date')){
      
    $i++;
      
    // это первая строчка, там 12 ячеек
      
    $return_array[$i]['day']=trimstrip_tags($tr_arr[1][0]));  
      
    $return_array[$i]['time'][]=trim(strip_tags($tr_arr[1][1]));   
      
    $return_array[$i]['images'][]='http://pogoda.mail.ru/img/new/'.preg('<div class="([^>]+?)" title="',$tr_arr[1][3] ).'.png'
      
    $return_array[$i]['mr'][]=trim(strip_tags($tr_arr[1][4]));    
     
     }else{
     
      
    $return_array[$i]['time'][]=trim(strip_tags($tr_arr[1][0]));   
      
    $return_array[$i]['images'][]='http://pogoda.mail.ru/img/new/'.preg('<div class="([^>]+?)" title="',$tr_arr[1][2] ).'.png';
      
    $return_array[$i]['mr'][]=trim(strip_tags($tr_arr[1][3]));  
     
     }
     

    function 
    preg($p$t){
     
    preg_match('#'.$p.'#is'$t$r);
     return 
    $r[1]; 
     
    }
     
    print_r($return_array);  
    Можно очень просто дописать парсер всех значений и\или вообще не использовать jquery
     
    Ser Frood нравится это.
  5. Ser Frood

    Ser Frood Заблокирован

    Регистр.:
    12 дек 2006
    Сообщения:
    519
    Симпатии:
    384
    KillDead спс)) хотя я уже написал сам)) тему клоуз
     
Статус темы:
Закрыта.