За последние 24 часа нас посетили 20867 программистов и 1597 роботов. Сейчас ищут 1216 программистов ...

Контент со страцици с определенных сложных тегов..

Тема в разделе "Прочие вопросы по PHP", создана пользователем Maxer, 22 окт 2006.

Статус темы:
Закрыта.
  1. Maxer

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

    С нами с:
    22 окт 2006
    Сообщения:
    93
    Симпатии:
    0
    Вот есть страница например http://xxsite.ru/page.php
    надо мне вытацить от туда инфу которая начинается с

    <td colspan="8" class="body"><div class="block-header">
    тут весь интересующий меня контент

    и заканчивается на
    <td colspan="8" style="font-size: 80%;padding-left:40px">

    вот помогите. как тут?
    вот так не получается:
    Помогите а? пожалуйста.
     
  2. Mal Hack

    Mal Hack Активный пользователь

    С нами с:
    12 фев 2006
    Сообщения:
    8
    Симпатии:
    0
    Можно попробовать так (на вскидку):
    PHP:
    1. $str1 = preg_quote( '<td colspan="8" class="body"><div class="block-header"> ' );
    2. $str2 = preg_cuote( '<td colspan="8" style="font-size: 80%;padding-left:40px"> ' );
    3. preg_match( "#".$str1 . "(.+)".$str2."#is" $text , $matches );
    4. print_r($matches);
    $text - код удаленной страницы.
     
  3. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    1. Для оформления php-кода надо использовать тег php, а не code.
    2. Что-то кода очень много для столь простой операции - лень вдумываться в логику. Я не понял: зачем функция join? Во-первых, это алиас к функции implode; во-вторых, все это можно заменить на file_get_contents.
    3. Вот как бы я сделал:
    PHP:
    1.  
    2. <?php
    3. function grub($url, $start, $end) {
    4.     $url = strtolower($url);
    5.     if (substr_compare($url, 'http://', 0, 7) != 0)
    6.         $url = 'http://'.$url;
    7.     $content = @file_get_contents(urlencode($url));
    8.     if ($content === FALSE)
    9.         return 'Can\'t open file.';
    10.  
    11.     $startpos = strpos($content, $start);
    12.     if ($startpos === FALSE)
    13.         return 'Start position not found.';
    14.     $startpos += strlen($start);
    15.  
    16.     $endpos = strpos($content, $end, $startpos);
    17.     if ($endpos === FALSE)
    18.         return 'End position not found.';
    19.  
    20.     return substr($content, $startpos, $endpos-$startpos);
    21. }
    22. ?>
    23.  
     
  4. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    В данном случае нет необходимости в использовании регулярных выражений.
    Да и (.+) не всегда работать будет. Точнее редко будет работать: символы перевода строки не входят в точку при настройках php по-умолчанию. Или это только у меня?
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    тег РНР глючит при обработке ампрессандов, я уже тысячу раз это говорил местным админам а изменений так и не видно...
     
  6. Mal Hack

    Mal Hack Активный пользователь

    С нами с:
    12 фев 2006
    Сообщения:
    8
    Симпатии:
    0
    Я добавил модификатор s в паттерн, так что все в плане строк должно быть нормально.
    Это как кому больше нравится... Кода - меньше - факт, быстрдействие - не думаю, что будет сильно отличаться, хотя надо тестировать.

    Да, и еще. Для получения удаленной страницы использовать fsockopen хотя бы уж надо, но ни как не FileSystem Functions... При определенной конфигурации работать не будет, да и при плохом канале скрипт может в /dev/null уйти.
     
  7. Maxer

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

    С нами с:
    22 окт 2006
    Сообщения:
    93
    Симпатии:
    0
    Тут я так и не разобрался че куда вписывать :oops:
     
  8. Maxer

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

    С нами с:
    22 окт 2006
    Сообщения:
    93
    Симпатии:
    0
    а тут как надо сперва же получить контент да?
    PHP:
    1.  
    2.   <?
    3. $text = "$url";
    4.    $opens = fopen ($url, "r");
    5.    $data = fread ($opens, 10000000);
    6.    fclose ($opens);
    7. $str1 = preg_quote( '<td colspan="8" class="body"><div class="block-header"> ' );
    8. $str2 = preg_cuote( '<td colspan="8" style="font-size: 80%;padding-left:40px"> ' );
    9. preg_match( "#".$str1 . "(.+)".$str2."#is" $data , $matches );
    10. print_r($matches);
    11. ?>
    З.Ы все равно ниче не пахает.
     
  9. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?php
    2.  
    3. // Функция получения куска страницы.
    4. function grub($url, $start, $end) {
    5.    $url = strtolower($url);
    6.    if (substr_compare($url, 'http://', 0, 7) != 0)
    7.       $url = 'http://'.$url;
    8.    $content = @file_get_contents(urlencode($url));
    9.    if ($content === FALSE)
    10.       return 'Can\'t open file.';
    11.  
    12.    $startpos = strpos($content, $start);
    13.    if ($startpos === FALSE)
    14.       return 'Start position not found.';
    15.    $startpos += strlen($start);
    16.  
    17.    $endpos = strpos($content, $end, $startpos);
    18.    if ($endpos === FALSE)
    19.       return 'End position not found.';
    20.  
    21.    return substr($content, $startpos, $endpos-$startpos);
    22. }
    23.  
    24. //Вызов функции
    25. echo grub('http://xxsite.ru/page.php', '<td colspan="8" class="body"><div class="block-header">', '<td colspan="8" style="font-size: 80%;padding-left:40px">');
    26.  
    27. ?>
    Кода меньше из-за отсутствия кода получения файла и кода проверки результатов.
    Разницв в скорости небольшая - раз в 20-100 быстрее :).
     
  10. Anonymous

    Anonymous Guest

    Господи, какие мелочи... =)))
     
  11. Это как раз то, о чём я говорил.
    Время, затраченное на получение содержимого страницы, примерно в десятки тысяч раз больше, чем на парсинг.
    соответственно, замена регулярных выражений на нерегулярные даст прирост в скорости скрипту в целом на тысячные доли процента.
    Но понять это дано не всем.

    цифры 20-100 раз - тоже из пальца высосаны. разница составляет 0,5-3 раза максимум.
     
  12. Anonymous

    Anonymous Guest

    Господа спорщики - замеры в студию!
    Без представления тестов, замеров и обоснованных изложений данные утверждения считаю голословными. В отдельную тему, плиз.
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    нечего им мерять ни тут ни "там" ...

    =)
     
Статус темы:
Закрыта.