Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Распарсить страничку


Автор: Black_leopard 15.3.2007, 19:41
Добрый вечер!
Решил попробовать вытащить с сайта ЦБ России состояния валют, вот url
http://www.investbank.ru/companies/val_mark/currency.php?select1=none&date=15.03.2007
но у меня ничего не выходит, подскажите пожалуйста как это можно сделать, на выходе охото получить что-то типа
Array (
    ["USD"] => 
               Array (
                   ["Name"] => Доллар США
                   ["Kol"] => Количество
                   ["Price"]=>Стоимость 
              )
    ....
)

 ! 
PARROT
Перед постингом своих сообщений, выбирайте подходящий форум!

Автор: gta4kv 15.3.2007, 19:52
Ты покажи как пробывал, может что-то просто не правильно? 

Автор: Black_leopard 15.3.2007, 20:29
Код

$fp = fopen("http://www.investbank.ru/companies/val_mar...date=15.03.2007", "r") or die("File open error");
    $num = 0;
    $valuta = array();
    while (!feof($fp)) {
        $line = fgets($fp, 1024);
        $line = trim($line);
        if (strpos($line, "<tr class=tablebody>") !== false) {
            $pos_home = strpos($line, "<tr class=tablebody>") + strlen("<tr class=tablebody>");
            $pos_end = strpos($line, "</tr>", $pos_home);
            $line = substr($line, $pos_home, $pos_end);
            $line = str_replace("<td>", "|", $line);
            $line = str_replace("</td>", "", $line);
            $line = str_replace("</tr>", "|", $line);
            $num ++;
            for ($i = 0; $i < 6; $i ++) {
                $name = substr($line, strpos($line, "|", 0)+1, strpos($line, "|", 1)-1);
                $line = substr($line, strlen($name)+1);
                $valuta[$num][$i] = $name;
            }            
        }
    
    }

    echo '<pre>';
    print_r($valuta);
    echo '</pre>';


Сделал таким образом, но мне почему-то этот способ не очень нравится

Автор: -=Ustas=- 16.3.2007, 08:41
Цитата(Black_leopard @  15.3.2007,  20:29 Найти цитируемый пост)
Сделал таким образом, но мне почему-то этот способ не очень нравится

Еще бы. Самый простой способ
Код

<?php

preg_match_all( '#\<tr\s+class\=tablebody\>\<td\>(.*)\<\/td\>\<td\>(.*)\<\/td\>\<td\>(.*)\<\/td\>\<td\>(.*)\<\/td\>\<td\>(.*)\<\/td\>\<td\>(.*)\<\/td\>\<\/tr\>#isU', $content, $currency );

echo '<pre>';
print_r($currency);

?>


Добавлено @ 08:47 
А вообще, html парсить - это не правильно (всмысле тебе постоянно нужно будет следить за версткой) Лучше ищи экспорты XML и ими пользуйся, например http://www.cbr.ru/scripts/XML_daily.asp

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)