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

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

  • TRIAL

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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


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

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


    adw/0
  • adw0rd

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

  • adw0rd

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

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


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


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




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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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