ФорумПрограммированиеPHP для идиотов → Парсер странички и регулярки (не получается)

Парсер странички и регулярки (не получается)

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 20 августа 2007 г. 6:58

    Вобщем решил поэксперементировать с парсингом страничек. Но к сожалению совсем не силен в регулярках.
    Вобщем вот кусок кода, который нужно обработать:
    <div class=&quot;title&quot;>
    <a tabindex=&quot;6&quot; onclick=&quot;w(this,&#39;80.22.82&#39;,&#39;84=85&#39;);&quot; href=&quot;http://www.my-site.ru/&quot; target=&quot;_blank&quot;>Мой замечательный сайт</a>
    </div>
    <div class=&quot;text&quot;>
    <span style=&quot;color:#777; font-weight:bold&quot;>текст ссылок: </span>
    <span>а здесь тот запрос по которому нашелся сайт</span>
    </div>
    <div class=&quot;info&quot;>
    <span style=&quot;color:#060;&quot;>
    www.my-site.ru
    &amp;nbsp;&amp;middot;&amp;nbsp;20&amp;nbsp;КБ
    </span>
    &amp;mdash;&amp;nbsp;найден по ссылке
    </div>

    Этот кусок кода мне нужно вытащить из всего хтмл документа, а потом узнать значение tabindex=&quot;6&quot; (т.е. узнать какая цифра).
    Таких кусков кода в документе много, как я понимаю ключем должен быть www.my-site.com. Помогите разобраться как это сделать. Я просто не догоняю как регуляркой это дело разобрать.
    from TRIAL with LOVE
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 20 августа 2007 г. 7:04, спустя 5 минут 45 секунд

    а &quot; &lt;div class=&quot;title&quot;> &quot; часто встречаются? вначале, середине или в конце?
    adw/0
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 20 августа 2007 г. 22:10, спустя 15 часов 6 минут 41 секунду

    Часто, как минимум 10 раз по всей странице.
    Я просто в упор без наглядного примера не понимаю регулярки и принцып их работы. Читал и учебники и мануалы и статью вельдера. Так много букв в голове сразу не укладывается.
    Вобщем объясните хотя бы принцып и вот например как сказать что в каком-то промежутке может быть любой текст. И какие символы надо экранировать всегда.
    from TRIAL with LOVE
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 20 августа 2007 г. 22:16, спустя 6 минут 8 секунд


    Часто, как минимум 10 раз по всей странице.
    Я просто в упор без наглядного примера не понимаю регулярки и принцып их работы. Читал и учебники и мануалы и статью вельдера. Так много букв в голове сразу не укладывается.
    Вобщем объясните хотя бы принцып и вот например как сказать что в каком-то промежутке может быть любой текст. И какие символы надо экранировать всегда.


    Все приходит с опытом :)
    Экспериментируй, допустим на выходных :)
    Я сам долго вкуривал все прелести регулярных выражений, сначала POSIX, после PCRE
    и ИМХО изучай PCRE хоть он и в некоторых местах и проигрывает в производительности, ибо POSIX&#39;а в PHP6 в базовом пакете нет (если уж разработчики выбрали PCRE вместо POSIX)…

    как сказать что в каком-то промежутке может быть любой текст.


    Не совсем понял, что сказать?

    И какие символы надо экранировать всегда.


    adw/0
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 20 августа 2007 г. 22:26, спустя 10 минут

    Давай вместе разберем :)


    <div class=&quot;title&quot;>
    <a tabindex=&quot;6&quot; onclick=&quot;w(this,&#39;80.22.82&#39;,&#39;84=85&#39;);&quot; href=&quot;http://www.my-site.ru/&quot; target=&quot;_blank&quot;>Мой замечательный сайт</a>
    </div>
    adw/0
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 20 августа 2007 г. 23:34, спустя 1 час 7 минут 5 секунд

    жесть, я все-таки сделал что хотел, правда не знаю на сколько паривильно
    Вобщем-то мне со страницы надо было забрать цифровое значение из строки, которая удовлятворяет условию.
    Вот строка:
    <a tabindex=&quot;6&quot; onclick=&quot;w(this,&#39;80.22.82&#39;,&#39;84=89&#39;);&quot; href=&quot;http://www.my-site.ru/&quot; target=&quot;_blank&quot;>

    Применил следующий код:
    preg_match_all(&quot;#\<a tabindex=\&quot;(\d)\&quot; (.*) href=\&quot;http:\/\/www\.my-site\.ru\/\&quot; target=\&quot;_blank\&quot;\>#&quot;, $page, $arr);

    Как всё это дело грамотнее сделать? Мне надо извлекать цифру 6 из tabindex.
    Или и так всё нормально?
    from TRIAL with LOVE
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 20 августа 2007 г. 23:39, спустя 5 минут 1 секунду

    preg_match_all(&quot;#\<a tabindex=\&quot;(\d)\&quot; (.*?) href=\&quot;http:\/\/www\.my-site\.ru\/\&quot; target=\&quot;_blank\&quot;\>#&quot;, $page, $arr, PREG_SET_ORDER);


    ? - чтоб не жрал много, а то точка со звездочкой все сожрут :) (Читай &quot;жадность квантификаторов&quot;)
    $arr[1] - твоя цифра тока заметил что это preg_match_all !!!

    В этом случае твоя цифра $arr[0][1] (если твой индекс www.my-site.ru первый)
    Так будет если флаг PREG_SET_ORDER
    adw/0
  • welder

    Сообщения: 2947 Репутация: N Группа: в ухо

    Spritz 21 августа 2007 г. 0:37, спустя 58 минут 42 секунды

    а так не проще ?


    preg_match_all (&quot;#<div class=\&quot;title\&quot;><a tabindex=\&quot;(.*)\&quot;.*>(.*)</a></div>#iU&quot;, $text, $regs , PREG_SET_ORDER);
    echo &quot;<pre>&quot;;
    print_r($regs);

  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 21 августа 2007 г. 0:50, спустя 12 минут 41 секунду


    а так не проще ?


    preg_match_all (&quot;#<div class=\&quot;title\&quot;><a tabindex=\&quot;(.*)\&quot;.*>(.*)</a></div>#iU&quot;, $text, $regs , PREG_SET_ORDER);
    echo &quot;<pre>&quot;;
    print_r($regs);




    Если только для отладки? :) var_dump()

    Если я правильно понял ему одна только ячейка нужна =)
    adw/0
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 21 августа 2007 г. 0:50, спустя 20 секунд

    Так, забудте про &lt;div>
    Есть только строка &lt;a tabindex=\&quot; …>, с ней и работаем.
    Вобщем хотелось бы узнать, как можно ускорить поиск (так как документ большой) и можно ли остановить поиск, так как под мое условие попадает только 1 строка.
    from TRIAL with LOVE
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 21 августа 2007 г. 0:53, спустя 2 минуты 21 секунду


    Так, забудте про &lt;div>
    Есть только строка &lt;a tabindex=\&quot; …>, с ней и работаем.
    Вобщем хотелось бы узнать, как можно ускорить поиск (так как документ большой) и можно ли остановить поиск, так как под мое условие попадает только 1 строка.


    тебе нужно преоброзовать к виду &#39;you_index&#39; => &#39;tabindex_num&#39;, где you_index это &quot;www.my-site.ru";
    adw/0
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 21 августа 2007 г. 0:55, спустя 2 минуты 15 секунд

    Да у меня уже всё отлично работает, просто хочу узнать можно ли как-то ускорить это дело и остановить поиск после первого нахождения.
    from TRIAL with LOVE
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 21 августа 2007 г. 3:21, спустя 2 часа 26 минут 17 секунд

    Кошмар, на выполнение 10 запросов и на получение их результата уходит более минуты.
    Придется заводить очередную таблицу и собирать нужные данные в нее запуская скрипт через cron.
    Теперь придется еще и cron осваивать :)))
    from TRIAL with LOVE
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 21 августа 2007 г. 3:32, спустя 10 минут 28 секунд

    предварительно обрезай кусок хтмлки через strpos+substr конструкцию и их производные :) скорости поболее будет.
    в первую очередь хорошо изучи зависимости документа который ты хочеш обрезать

    или так: ищи свой URL, потом режеш вперед от этой точки (strpos(&#39;твоя URL&#39;)) и назад (strrpos например, или strpos(&#39;твоя URL&#39;) - &quot;кол-во символов назад&quot;), а потом разбирай вырезанное preg_match&#39;ем
    adw/0
  • Yasumi

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 12:00, спустя 1824 дня 8 часов 27 минут

    РАДИ любви я ГОТОВ к тебе идти через ГОРЫ реки И мосты . я прихожу к тебе на ФЛЕТ … ПРИВЕТ!!!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!