Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 22 Май, 2012, 11:18:28

Страниц: [1]
Печать
Автор Тема: Парсер странички и регулярки (не получается)  (Прочитано 2222 раз)
0 Пользователей и 1 Гость смотрят эту тему.
TRIAL    ↓ 
20 Август, 2007, 05:58:22
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 7
Сообщений: 906
Сила слова: 0.77

Вобщем решил поэксперементировать с парсингом страничек. Но к сожалению совсем не силен в регулярках.
Вобщем вот кусок кода, который нужно обработать:
Text
<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    ↓ 
20 Август, 2007, 06:04:07 , спустя 5 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

а " <div class="title"> " часто встречаются? вначале, середине или в конце?
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
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 » Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
adw0rd    ↓ 
21 Август, 2007, 09:26:56 , спустя 10 минут
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67

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

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
TRIAL    ↓ 
21 Август, 2007, 10:34:01 , спустя 1 час 7 минут 5 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 7
Сообщений: 906
Сила слова: 0.77

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

PHP
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 » Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
welder    ↓ 
21 Август, 2007, 11:37:44 , спустя 58 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

пыха рулит
Группа: в ухо

Карма: 84
Сообщений: 2923
Сила слова: 2.87

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

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


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

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


Если только для отладки? :) var_dump()
 
Если я правильно понял ему одна только ячейка нужна =)
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
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"
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
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 » Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Страниц: [1]
Печать
 

Перейти в: