За последние 24 часа нас посетили 15034 программиста и 1767 роботов. Сейчас ищет 1531 программист ...

Парсер курса валют

Тема в разделе "Регулярные выражения", создана пользователем Dark Smoke, 11 ноя 2012.

  1. Dark Smoke

    Dark Smoke Активный пользователь

    С нами с:
    17 авг 2008
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Днепропетровск
    Не как не могу спарсить курс валют с сайта. Намудрил кода, а получить курс продажи и покупки доллора, евро и рубля не как (((
    Код (Text):
    1.  
    2.     $curl = curl_init();
    3.     curl_setopt_array($curl, array(
    4.         CURLOPT_RETURNTRANSFER => 1,
    5.         CURLOPT_URL => 'http://www.erstebank.ua/ru/home',
    6.         CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
    7.     ));
    8.    
    9.     $resp = curl_exec($curl);
    10.     curl_close($curl);
    11.    
    12.     $file = str_replace(array("\r", "\n", ' '), '', $resp);
    13.    
    14.     $pattern = "/<td .*>(.*)<\/td>/i";
    15.     preg_match_all($pattern, $file, $matches);
    16.    
    17.     var_dump($matches);
    А мне возвращает постоянно какой то бред, какое б регулярное выражение б не писал.
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (PHP):
    1. $pattern = '|<td>(.*)</td>|iU'; 
    Модификатор U для "жадности" выражения.

    И потом, вы же поубирали все пробелы, в итоге получаются теги, например, такие
    Код (Text):
    1. <tdstyle="text-align:right;">
    Так что в паттерне правило <td .*> с пробелом не прокатит. Тогда уж
    Код (PHP):
    1. $pattern = "|<td.*>(.*)</td>|iU"; 
    А если не удалять пробелы, можно и
    Код (PHP):
    1. $pattern = "|<td\s*.*>\s*(.*)\s*</td>|iU";