Распарсить pogoda_mail_ru

Статус
В этой теме нельзя размещать новые ответы.

Ser Frood

Заблокирован
Регистрация
12 Дек 2006
Сообщения
515
Реакции
397
Народ может кто помочь распарсиить сабж))
_http://pogoda.mail.ru/?city=1460&extended=1
вида:
Пн 24.08
ночь (картинка) +12°
утро (картинка) +16°
день (картинка) +18°
....
Вт 25.08
ночь (картинка) +12°
утро (картинка) +13°
день (картинка) +14°
...
Оч нуно)))
 
Используй simplehtmldom

Он тебе распарсит любую html страницу и представит тебе данные в удобном для тебя виде.
 
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" ну и т.д. И на основе этого составлять рег. выражения.
 
Если ещё нужно.
Табица там не очень хорошая- парсить не сложно, но геморойно. Ибо куй разберёшся в нагромждении стилей, разметки, классов.
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']=trim( strip_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
 
KillDead спс)) хотя я уже написал сам)) тему клоуз
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху