Парсинг страницы

Тема в разделе "PHP", создана пользователем Stripe, 16 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Есть кусок кода:
    HTML:
    
    <tr align=left ><td><a href='http://111'>крукркур</a><td>цфукфк<td>птпатn<td>фыафца<td>ваыи<td>укну<tr align=left class="ch"><td><a href='http://222'>укнркр</a><td>нонеоне<td>чьнн<td>аетеат <td>online<td>rock<tr align=left ><td><a href='http://333'>аттпта</a><td>тнртн<td>кненкен<td>сноно<td>апраер<td>ьорьро<tr align=left class="ch"><td><a href='http://444'>екнкен</a><td>ролорл<td>чсячся<td>фывфывфыв<td>фвфывфцв<td>вапвапвап</table>
    
    Пытаюсь распарсить его таким образом:
    PHP:
    $pagecontent ereg_replace("<tr align=left >","",$pagecontent);
    $pagecontent ereg_replace("<tr align=left class=\"ch\">","",$pagecontent);
    $pagecontent ereg_replace("<a href='http://","",$pagecontent);
    $pagecontent ereg_replace("</a>","",$pagecontent);
    $pagecontent ereg_replace("'>",":",$pagecontent);
    $pagecontent ereg_replace("</table>","",$pagecontent);
    $pagecontent ereg_replace("<td>",":",$pagecontent); 
    $html explode("\n",$pagecontent);
    for(
    $i=0;$i<=sizeOf($html);$i++)
        {
        if(
    strstr($html[$i],":"))
            {
            
    $tmp explode(":",$tmp);
            
    $chto[] = array(
                
    "aaa" => $tmp[0],
                
    "bbb" => $tmp[1],
                
    "eee" => $tmp[2],
                
    "www" => $tmp[3]
                );
            }
        }
    print 
    "<pre>";
    print_r($chto);
    print 
    "</pre>\n";
    В ответ получаю пустой массив. В чем может быть проблема?
     
  2. pori

    pori Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    114
    Симпатии:
    18
    В этой строчке:

    PHP:
     $tmp explode(":",$tmp); 
    Переменная $tmp - пустая. Нужно:

    PHP:
     $tmp explode(":",$html[$i]); 
     
    Stripe нравится это.
  3. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    мммм... запись исходного кода HTML которую я привел, она в одну строку идет? Как разбить ее на 4? Каждая новая строка начинается с
    .
     
  4. pori

    pori Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    114
    Симпатии:
    18
    добавь строку

    PHP:
    $pagecontent ereg_replace("<tr","\r\n<tr",$pagecontent);
     
    Stripe нравится это.
  5. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    БАЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
    Все работает, код везде работал в парсерах, а тут перестал вдруг, я думал с ума схожу.
     
  6. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    Странный парсинг.
    Почему используеться ereg, когда тоже самое делается обычным str_replace. Если уж использовать регулярные, то примерно в таком контексте
    PHP:
    preg_match_all('/<tr[^>]+align=["|\']?left["|\']?[^>]*>(.*)<\/tr>/Usi'$pagecontent$outcontent);
    и уже после разбирать строки. имхо
     
  7. Happyuser

    Happyuser Создатель

    Регистр.:
    18 авг 2008
    Сообщения:
    17
    Симпатии:
    1
  8. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Sanuch, парсим как умеем :))) С регулярками я плохо знаком.
     
  9. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    надо учить регулярные выражения, иной раз они выручают :)
     
Статус темы:
Закрыта.