Спарсить цену

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

  1. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    Вот отсюда http://biz.liga.net/tek/oil/ нужно спарсить средние цены на бенз.
    Вот фрагмент HTML кода:
    HTML:
           <tr class="odd">
                        <td><a href="/tek/oil/a-80.htm">Бензин А-76/80</a></td>
                        <td>9.68</td>
                        <td>9.25/10.50</td>
                    </tr>
    
    Вытащить надо 9.68. Я так понимаю, что это осуществляется с применением регулярных выражений. А в них я не особо разбираюсь…
     
  2. dirdir

    dirdir Постоялец

    Регистр.:
    19 мар 2012
    Сообщения:
    85
    Симпатии:
    11
    PHP:
    $page file_get_contents ('страница.txt');
     
    $find preg_match ("#<td>[0-9\.]{0,5}</td>#Uis",$page$rez);
     
    echo 
    "<pre>";
    print_r ($rez);
     
  3. marvinz

    marvinz

    Регистр.:
    7 апр 2009
    Сообщения:
    158
    Симпатии:
    74
    вот решение твоей задачи на питоне

    Код:
    from grab import Grab
    g = Grab()
    g.go('http://biz.liga.net/tek/oil/')
    result = g.response.body
    print result.split("<td>")[22].split("</td>")[0]
    print result.split("<td>")[25].split("</td>")[0]
    print result.split("<td>")[28].split("</td>")[0]
    print result.split("<td>")[31].split("</td>")[0]
    print result.split("<td>")[34].split("</td>")[0]
    выдаст
    9.68
    10.23
    10.54
    11.21
    9.81
    все нужные тебе средние цены. можешь переписать на своем языке программирования
     
  4. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    Не выходит чуть. Я по другому пробовал сделать: вывести данные, которые находятся между
    HTML:
    <td><a href="/tek/oil/a-80.htm">Бензин А-76/80</a></td>
                        <td>
    и
    HTML:
    </td>
    вот так:
    PHP:
    <?php
     
    $url 
    "qqq.html";
    $unique_start "<tr class=\"odd\">";
    $unique_end "</td>";
     
    function 
    cena($url$unique_start$unique_end) { 
    $code file_get_contents($url); 
    preg_match('/'.preg_quote($unique_start,
    '/').'(.*)'.preg_quote($unique_end'/').'/Us'$code$match); 
    return 
    $match[1]; 
    }
     
    echo 
    cena($url$unique_start$unique_end);
     
    ?>
    Но так выдает не чисто цену, а в виде <td>9.25, а нужно без <td>
     
  5. dirdir

    dirdir Постоялец

    Регистр.:
    19 мар 2012
    Сообщения:
    85
    Симпатии:
    11
    PHP:
    $результат_без_тд str_replace ('<td>'''cena($url$unique_start$unique_end))
     
    dmbltro нравится это.
  6. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    Благодарю! =)
     
  7. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    1) Для того что бы этого небыло нужно правельно шаблон задать ! с какой радости .* !?!?может все таки как то так (\d+\.\d+)
    2) Если уж чистите от тегов тогда strip_tags(); иначе чуть сменится HTML и пипец приедит....
     
  8. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    И от ещё.
    Есть например такой код:
    Код:
    <tr><td>Бла-бла-бла</td>
    <td>9.12</td>
    <td>10.22</td>
    <td>11.89</td>
    </tr>
    Как при выборе пропустить, например, строку с 9.12 и забрать строку с 10.22 (или пропустить 9.12, 10.22 и забрать 11.89 (при условии, что пропускаемые числа могут меняться)?
     
  9. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    подробней на эту тему можно?
     
  10. dirdir

    dirdir Постоялец

    Регистр.:
    19 мар 2012
    Сообщения:
    85
    Симпатии:
    11
    Дело в том что код dmbltro не работат вообще.
    И мои познания в пхп не позволяют разобраться в причине.
    (ещё раз напишу что у меня сработало
    $find = preg_match_all ("#<td>[0-9\.]{0,5}</td>#Uis",$page, $rez);

    Да, вебмастера они не предсказуемые. Могут и дизайн поменять.