Парсер

Тема в разделе "PHP", создана пользователем Panzers^), 3 сен 2008.

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

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    Вроде как..
    Есть страничка, вывожу ее значит к себе через функцию file_get_contents(); но с этой странички мне нужна только одна таблица с содержанием, остальное не нужно, пытаюсь эту таблицу вывести функцией preg_match_all(); но я не понимаю как, я смотрел несколько скриптов парсинга, по аналогии делал, но получалось либо вывести заголовок, либо ничего. Надо сделать парс по определенным тегам парным, т.е. есть таблица <table ></table > и вот ее вывести с содержанием, а определить какую именно таблицу - это по классу сделать, например:
    Код:
    <table class=\"petya\">content</table >
    <table class=\"vasya\">content</table >
    и вот вывести только таблицу с классом "петя"..вот этого я не понимаю как сделать..Точнее какой нужен шаблон для функции, может поможете?
     
  2. Sercib

    Sercib Создатель

    Регистр.:
    2 май 2008
    Сообщения:
    19
    Симпатии:
    1
    Примерно что-такого
    $s=file_get_contents('aaa.html');
    preg_match_all('|(<table class=\\"petya\\">.+?</table >)|Us',$s,$table);
     
    Panzers^) нравится это.
  3. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    И все равно не хочет(
    Показывает "Array" и все..
     
  4. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    202
    Симпатии:
    66
    Конечно будет Array возвращать. Сделайте ему

    var_dump($table) и посмотрите, из каких элементов этого массива надо взять значение.

    Я бы добавил в preg_match_all в конец еще аргумент PREG_SET_ORDER.
     
    Panzers^) нравится это.
  5. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    var_dump - array(1) { [0]=> array(0) { } }
    Значит не захватилось или что?
     
  6. Sect0R

    Sect0R Читатель

    Заблокирован
    Регистр.:
    4 апр 2007
    Сообщения:
    136
    Симпатии:
    43
    Да.
    Может у тебя не
    Код:
    <table class=\"vasya\">content</table >
    
    а

    Код:
    <table class="vasya">content</table >
    
    ???

    можно вообще проще:
    PHP:
    $s=file_get_contents('aaa.html');
    $class '"petya"';
    preg_match_all('|(<table class='.preg_quote($class).'>.+?</table >)|Uis',$s,$table);
     
    Panzers^) нравится это.
  7. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    Хм, а чем проще будет если класс будет в переменной?
    Угу, это
    Код:
    <table class="vasya">content</table >
    Но нужно экранировать двойные ковычки, вот слэши и стоят..

    Добавлено через 1 минуту
    Все, сори) Не заметил что там preg_quote...

    Добавлено через 18 минут
    Во! Вроде получилось) Кстати, а почему не получается вывести хтмл страничку через file_get_contents ?
    пишу:
    PHP:
    $hit file_get_contents('http://IP:8000/index.html');
    в ответ получаю:
    Warning: file_get_contents(http://IP:8000/index.html) [function.file-get-contents]: failed to open stream: HTTP request failed! ICY 404 Resource Not Found in Q:\home\localhost\www\test.php on line 2
     
  8. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    202
    Симпатии:
    66
    Вот же написано

    Ресурс не найден.

    В браузере попробуйте открыть тот же URL.
     
  9. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    А вот как раз таки в браузере все нормально, можно как то поправить? Или может как то по другому?
     
  10. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    202
    Симпатии:
    66
    У вас, случайно, не стоят в .htaccess ModRewrite редиректы (для ЧПУ, например)?
     
Статус темы:
Закрыта.