АРМАДА
Учим php: Парсер своими руками. Теория
На страницу 1, 2  След.
Новая тема Написать ответ

ram_by
Свой
Зарегистрирован: 23.12.2009
Сообщений: 16
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 3:35 pmДобавить в избранноеОтветить с цитатой
Вторая моя статья на тему программирования. В ней даны теоритические данные о написании парсера/граббера на php. Это не самый лучший метод, но он имеет место существовать. В статье описаны функции и алгоритм написания. Статья написана полностью на основе собственного опыта.

парсер на php

Cabal
Гуру
Зарегистрирован: 20.10.2007
Сообщений: 1360
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 3:58 pmОтветить с цитатой
-------В общем тут была критика лютобешенная--------
Убрал. Наверно я чего то не понял. Скорее всего это не код, а пример непонятного мне алгоритма изображенный схематично отсюда и кириллица в коде и странная идея с раскоментированием, когда можно просто выдрать из кода то что нужно как минимум тремя более вменяемыми способоми... Наверно я не понял цель и как следсвие смысл. Извиняюсь. Но что нибудь по PHP всё таки почитай. В частности по регуляркам. Потому что даже если это не понятая мной идея парсинга изложенная схемотично, а не код, в ней нет смысла ведь инструментов дофига.
Cabal - патентованный зануда.

ram_by
Свой
Зарегистрирован: 23.12.2009
Сообщений: 16
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 4:29 pmОтветить с цитатой
Во всяком случае это был один из способов)))

пс: толчок к регуляркам получен )))

Cabal
Гуру
Зарегистрирован: 20.10.2007
Сообщений: 1360
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 4:53 pmОтветить с цитатой
ram_by писал(а):
Во всяком случае это был один из способов)))


Вирусного маркенга ломающего шаблон программистам? Наверно.
Cabal - патентованный зануда.

Sterx +
Опытный
Зарегистрирован: 08.10.2007
Сообщений: 252
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 8:39 pmОтветить с цитатой
не автор. не надо такому учить.
аккаунты адалт партнерок за 50%

ram_by
Свой
Зарегистрирован: 23.12.2009
Сообщений: 16
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 8:44 pmОтветить с цитатой
:oldher: Забываем про этот неудачный пример, завтра опубликую простую rss читалку на основе регулярных выражений...

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 18000
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 8:45 pmОтветить с цитатой
жесть.. какой же это парсер, если тама даже нет такой вот функции:
Код:

function getlinksfromtext($t) { $ret = array(); preg_match_all('/<.*a.*href=\s*[\'"](.+)[\'"].*>.*<\/.*a.*>/iU', $t, /* пони коверкает сам себя */ $matches); for ($i=0; $i< count($matches[0]); $i++) { $ret[] = $matches[1][$i]; } return $ret; }


да и более то особо ничего ненадо, кстати Smile

идея, взять страничку, выбрать ссылки (функция выше), определить след. стр по коду, или по стд. алгоритму, фильтровать & сохранить линки..

______

Cabal,

ты бы еще дописал:

"Я ж говорю что идея интересная" (c) Cabal Smile
http://m.lsl.com/

zeoman
V.I.P.
Зарегистрирован: 19.03.2008
Сообщений: 3708
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 9:50 pmОтветить с цитатой
Человек учится. Чего налетели? Smile
BidTraffic - Зарабатывай больше! | Мамин ребёнок | Бросить курить

ram_by
Свой
Зарегистрирован: 23.12.2009
Сообщений: 16
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 10:43 pmОтветить с цитатой
Да я как бэ и не учусь, давненько пишу, просто как-то руки не доходили до регулярок... Теперь дошли =)
Так что, что ни делается - всё к лучшему.

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 18000
Обратиться по нику
# Добавлено:Пт Dec 25, 2009 11:03 pmОтветить с цитатой
забыл добавить..
вот на таких людях, как я и кабал.. и держиться тех часть знаний форума..
вообще, знаете почему Гитлер так легко захватил Европу и дальше?
потому что у него были новый разработки мощного оружия, и лучьшие наверно из США/СССР..
а это оружие, тоже самое что и технологии..
вот такие как я и кабал, и вносим на форум технологии..

Человек учится. Чего налетели?

вообще, учиться можно тихо..

тут не в этом дело,
с мнением кабала я согласен полностью..
а статья просто дает ложное понимание парсинга..
тама просто стандартные куски кода..
их наверно можно к много чему применять.. но для парсинга, это лишнее.. а как раз что должно быть, - нету

это просто обычный "макет", просто набор простых кусков, только из его материала/кусков сделать парсер - невозможно..

в программирование есть два вида работников,
это аналитик и сам программер..
я вот и тот и тот, т.к. и дал пример функции, + описал алгоритм:
идея, взять страничку, выбрать ссылки (функция выше), определить след. стр по коду, или по стд. алгоритму, фильтровать & сохранить линки..

- он несложнее этих строк, и даже в реализации также легок,

могу дать, кому надо.. свой недоделанный пхп скрипт, парсинга практически любой СЕ..
по алгоритму приведенным мной выше..
мой: юзает курл, т.е. эмулировать кого угодно (человека а не бота) умеет..
работает по "стд. алгоритму", т.е. след. линк неберет с стр. серпа, а вычисляет со смещением +100 (по стд. алгоритму) .. и снова забирает сорц, фильтровать & сохранить линки
парсить какую угодно СЕ может, лижбы была четкая пони насчет "стд. алгоритму - заранее узнаваемый линк след. серп станицы"..
реф. также соблюдает, текущая стр. серпа, как след. реф линк на след. запрос, (первая как - МЕИН СЕ).. ясно думаю, да..
вообще он недоделан но базовые функции могу передать..
http://m.lsl.com/

Cabal
Гуру
Зарегистрирован: 20.10.2007
Сообщений: 1360
Обратиться по нику
# Добавлено:Сб Dec 26, 2009 2:47 pmОтветить с цитатой
IseeDeadPeople писал(а):

Cabal,
ты бы еще дописал:

"Я ж говорю что идея интересная" (c) Cabal Smile


Не. Моей терпимости хватило только на то чтобы предположить что это я чего то не понимаю, а не ТС показывает нам быдлокод в десять в тридцать четвёртой степени. Drinks or Beer
Cabal - патентованный зануда.

Gaseo
Свой
Зарегистрирован: 26.12.2009
Сообщений: 21
Обратиться по нику
# Добавлено:Вс Dec 27, 2009 5:51 amОтветить с цитатой
Да уж, это не парсер, а из серии "как бы еще поизвращаться" Smile не в обиду ТС...
кстати, любителям регулярок скажу, что не всегда их использование целесообразно, так как в некоторых случаях они увеличивают время обработки... Wink
GameAgregator.com - пришло время зарабатывать на гемблинге!

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 18000
Обратиться по нику
# Добавлено:Вс Dec 27, 2009 9:53 pmОтветить с цитатой
так как в некоторых случаях они увеличивают время обработки...

игогошка, любый кусок кода на этапе интерпретации увеличивает время обработки,
на самом деле, недумаю что именно рег. выры. уж значительно (заметно) увеличивают время интерпретации кода в машинный код, если оно не в несколько килобайт само рег. выражение..
а само исполнение, конечно ресурсоемко,
т.к. это как мин. сложный поиск, копирование, замена какие то частей текста, может и в 10Мб текста..

есть напр возможность произвести выбор линков из текста, напр. так:

Код:

function Return_Substrings($text, $sopener, $scloser) {
$result = array();
$noresult = substr_count($text, $sopener);
$ncresult = substr_count($text, $scloser);
if ($noresult < $ncresult) { $nresult = $noresult; } else { $nresult = $ncresult; }
unset($noresult);
unset($ncresult);
for ($i=0;$i<$nresult;$i++) {
$pos = strpos($text, $sopener) + strlen($sopener);
$text = substr($text, $pos, strlen($text));
$pos = strpos($text, $scloser);
$result[] = substr($text, 0, $pos);
$text = substr($text, $pos + strlen($scloser), strlen($text));
}
return $result;
}

    $string = '<a href="1">1</a> <a href="3">1</a> <a href="2">1</a> ';
    $result = Return_Substrings($string, "<a href=\"", "\">");
    echo implode(" AND ", $result);

(проверено, работает)



но думаю это по ресурсам равнозначно коду с рег. выр.:

Код:
function getlinksfromtext($t) { $ret = array(); preg_match_all('/<.*a.*href=\s*[\'"](.+&
#41;[\'"].*>.*<\/.*a.*>/iU', $t, /* пони коверкает сам себя */ $matches); for ($i=0; $i< count($matches[0]); $i++) { $ret[] = $matches[1][$i]; } return $ret; }



хотябы потому что, действие то совершаеться тоже, и регулярки именно для таких работ и созданы.. и есть еще правило вроде, чем короче код, тем он эффективнее.. (эффективнее еще конечно не значит, менее требовательный к ресурсам, но фсё же..)

в любом случаи, смотря на функции Return_Substrings и моё рег. выр. надо понимать, что в машинном коде, это приблизительно равнозначно будет.. ф. Return_Substrings - как бы я наз. "в тупую сделать что то".. на самом деле, как вы по ней видите, она несодержит никаких сложных рег. выр., зато насыщены простыми но большими по обьему-коду операциями, более простых, т.е. это считай разложенный многочлен на простые составные (как там в математике).. и вызов регулярки, по идее, на более низких уровнях.. приводит к многочисленным, тем же самым вызовам функции, выполнениям операций, как напр. в той же ф. Return_Substrings

_______

может ф. с моим рег. выр. выборки линков будет и более ресурсоемко, но только из за того что делает более интеллектуальную выборку, во всех вариациях одинарных, двойных квч. с пробелами внутри, новыми строками, табуляциями.. и т.д.
http://m.lsl.com/

Gaseo
Свой
Зарегистрирован: 26.12.2009
Сообщений: 21
Обратиться по нику
# Добавлено:Пн Dec 28, 2009 12:44 amОтветить с цитатой
IseeDeadPeople писал(а):
так как в некоторых случаях они увеличивают время обработки...

игогошка, любый кусок кода на этапе интерпретации увеличивает время обработки,.....



В твоем примере да, но я имел ввиду, что для простых задач удобнее использовать тот же explode и т.д...
Потому как есть пишут регулярку вместо strtolower (пример из жизни) r5

IseeDeadPeople
Объединенная Электрическая
Зарегистрирован: 06.12.2005
Сообщений: 18000
Обратиться по нику
# Добавлено:Пн Dec 28, 2009 1:15 amОтветить с цитатой
Gaseo, ну эксплод/имплод помоему у него основная и единственная функция разбивка склеивания строки на массив по символу.. (имплод, наоборот склейка по символу массива в строку)
типа:
$bukvi = explode(" ", "a b c");
думаю даже что то сложнее, работу с текстом, не то что выборку линков из хтмл-сорца, им несделаешь.. теоретически можно наверно, типа сначало разбить по href, потом по "> .. потом проходить все элементы и каждый сравнивать по обычному сравнению строк ==
но в регулярке, все будет короче в раз 50 наверно по обьему кода
ну а если надо опустить все символы, а потом пустить по кругу.. именно для этой единственной операции и создана strtolower,
думаю любой знает (кто хоть чуть игогокал пхп) о существовании strtolower, и небудет для таких операций делать регулярки, ведь они сложнее явно.. и это единственная причина, по которым их неюзают, когда надо..
чтоб их самому писать правильно, это вообще надо как мин. математику знать, и голова должна хорошо соображать.. особенно если смотреть пример выше с выбором линков..
и когда я изучал их, всегда замечал, что голова начинает хорошо работать после изучения подобного, и после того.. т.е. это даже полезно и в быту, в них разбираться .. Angel
http://m.lsl.com/
Новая тема Написать ответ    ГЛАВНАЯ ~ ДАЙДЖЕСТ БЛОГОСФЕРЫ

Перейти:  





Генеральный спонсор



Партнеры