|
TRIAL ↓
|
 |
|
20 Август, 2007, 05:58:22
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
Вобщем решил поэксперементировать с парсингом страничек. Но к сожалению совсем не силен в регулярках.
Вобщем вот кусок кода, который нужно обработать:
<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
· 20 КБ
</span>
— найден по ссылке
</div>
Этот кусок кода мне нужно вытащить из всего хтмл документа, а потом узнать значение tabindex="6" (т.е. узнать какая цифра).
Таких кусков кода в документе много, как я понимаю ключем должен быть www.my-site.com. Помогите разобраться как это сделать. Я просто не догоняю как регуляркой это дело разобрать.
|
|
|
|
|
Записан
|
from TRIAL with LOVE
|
|
|
|
adw0rd ↓
|
 |
|
20 Август, 2007, 06:04:07 , спустя 5 минут 45 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
а " <div class="title"> " часто встречаются? вначале, середине или в конце?
|
|
|
|
|
Записан
|
|
|
|
|
TRIAL ↓
|
 |
|
21 Август, 2007, 09:10:48 , спустя 15 часов 6 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
Часто, как минимум 10 раз по всей странице.
Я просто в упор без наглядного примера не понимаю регулярки и принцып их работы. Читал и учебники и мануалы и статью вельдера. Так много букв в голове сразу не укладывается.
Вобщем объясните хотя бы принцып и вот например как сказать что в каком-то промежутке может быть любой текст. И какие символы надо экранировать всегда.
|
|
|
|
|
Записан
|
from TRIAL with LOVE
|
|
|
|
adw0rd ↓
|
 |
|
21 Август, 2007, 09:16:56 , спустя 6 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
Часто, как минимум 10 раз по всей странице.
Я просто в упор без наглядного примера не понимаю регулярки и принцып их работы. Читал и учебники и мануалы и статью вельдера. Так много букв в голове сразу не укладывается.
Вобщем объясните хотя бы принцып и вот например как сказать что в каком-то промежутке может быть любой текст. И какие символы надо экранировать всегда.
Все приходит с опытом :)
Экспериментируй, допустим на выходных :)
Я сам долго вкуривал все прелести регулярных выражений, сначала POSIX, после PCRE
и ИМХО изучай PCRE хоть он и в некоторых местах и проигрывает в производительности, ибо POSIX'а в PHP6 в базовом пакете нет (если уж разработчики выбрали PCRE вместо POSIX)...
как сказать что в каком-то промежутке может быть любой текст.
Не совсем понял, что сказать?
И какие символы надо экранировать всегда.

|
|
|
|
« Последнее редактирование: 21 Август, 2007, 09:25:22 от ad3000 »
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
21 Август, 2007, 09:26:56 , спустя 10 минут
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
Давай вместе разберем :)
<div class="title">
<a tabindex="6" onclick="w(this,'80.22.82','84=85');" href="http://www.my-site.ru/" target="_blank">Мой замечательный сайт</a>
</div>
|
|
|
|
|
Записан
|
|
|
|
|
TRIAL ↓
|
 |
|
21 Август, 2007, 10:34:01 , спустя 1 час 7 минут 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
жесть, я все-таки сделал что хотел, правда не знаю на сколько паривильно
Вобщем-то мне со страницы надо было забрать цифровое значение из строки, которая удовлятворяет условию.
Вот строка:
<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 ↓
|
 |
|
21 Август, 2007, 10:39:02 , спустя 5 минут 1 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
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
|
|
|
|
« Последнее редактирование: 21 Август, 2007, 10:51:13 от ad3000 »
|
Записан
|
|
|
|
|
welder ↓
|
 |
|
21 Август, 2007, 11:37:44 , спустя 58 минут 42 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
пыха рулит
Группа: в ухо Карма: 84
Сообщений: 2923 Сила слова: 2.87
|
а так не проще ?
preg_match_all ("#<div class=\"title\"><a tabindex=\"(.*)\".*>(.*)</a></div>#iU", $text, $regs , PREG_SET_ORDER );
echo "<pre>";
print_r($regs);
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
21 Август, 2007, 11:50:25 , спустя 12 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
а так не проще ?
preg_match_all ("#<div class=\"title\"><a tabindex=\"(.*)\".*>(.*)</a></div>#iU", $text, $regs , PREG_SET_ORDER );
echo "<pre>";
print_r($regs);
Если только для отладки? :) var_dump()
Если я правильно понял ему одна только ячейка нужна =)
|
|
|
|
|
Записан
|
|
|
|
|
TRIAL ↓
|
 |
|
21 Август, 2007, 11:50:45 , спустя 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
Так, забудте про <div>
Есть только строка <a tabindex=\" ...>, с ней и работаем.
Вобщем хотелось бы узнать, как можно ускорить поиск (так как документ большой) и можно ли остановить поиск, так как под мое условие попадает только 1 строка.
|
|
|
|
|
Записан
|
from TRIAL with LOVE
|
|
|
|
adw0rd ↓
|
 |
|
21 Август, 2007, 11:53:06 , спустя 2 минуты 21 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
Так, забудте про <div>
Есть только строка <a tabindex=\" ...>, с ней и работаем.
Вобщем хотелось бы узнать, как можно ускорить поиск (так как документ большой) и можно ли остановить поиск, так как под мое условие попадает только 1 строка.
тебе нужно преоброзовать к виду 'you_index' => 'tabindex_num', где you_index это " www.my-site.ru"
|
|
|
|
|
Записан
|
|
|
|
|
TRIAL ↓
|
 |
|
21 Август, 2007, 11:55:21 , спустя 2 минуты 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
Да у меня уже всё отлично работает, просто хочу узнать можно ли как-то ускорить это дело и остановить поиск после первого нахождения.
|
|
|
|
|
Записан
|
from TRIAL with LOVE
|
|
|
|
TRIAL ↓
|
 |
|
21 Август, 2007, 02:21:38 , спустя 2 часа 26 минут 17 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 7
Сообщений: 906 Сила слова: 0.77
|
Кошмар, на выполнение 10 запросов и на получение их результата уходит более минуты.
Придется заводить очередную таблицу и собирать нужные данные в нее запуская скрипт через cron.
Теперь придется еще и cron осваивать :)))
|
|
|
|
|
Записан
|
from TRIAL with LOVE
|
|
|
|
adw0rd ↓
|
 |
|
21 Август, 2007, 02:32:06 , спустя 10 минут 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
предварительно обрезай кусок хтмлки через strpos+substr конструкцию и их производные :) скорости поболее будет.
в первую очередь хорошо изучи зависимости документа который ты хочеш обрезать
или так: ищи свой URL, потом режеш вперед от этой точки (strpos('твоя URL')) и назад (strrpos например, или strpos('твоя URL') - "кол-во символов назад"), а потом разбирай вырезанное preg_match'ем
|
|
|
|
« Последнее редактирование: 21 Август, 2007, 02:34:46 от ad3000 »
|
Записан
|
|
|
|
|