PDA

Просмотр полной версии : А как вы пишите парсеры?


Chrome~
15.09.2009, 23:45
Привет! Интересуюсь темой насчет написания различных парсеров на Delphi. Хочу немного поднять опыт, поэтому провожу данный опрос. Какие функции используете вы при написании парсеров? Лично я все время использовал функции pos, delete, copy для получения необходимых мне данных. Сейчас немного задумался об эффективности и быстродействии данного метода; решил переходить на парсинг с помощью регулярных выражений.

Меня интересует, с помощью каких функций парсите вы? Считаете ли свой метод эффективным и быстродействующим? Пожалуйста, напишите, почему используете тот метод а не иной. Заранее благодарю всех, кто ответит.

drim
15.09.2009, 23:55
Делфи не использую со времён университета.
ИМХО самое лучшее, что есть для обработки текста - perl с его регулярными выражениями, поддерживающимися на уровне самого языка.

Gray_Wolf
16.09.2009, 00:27
Эх, писал когдато парсер на VB, вот где была жесть :)
А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.

drim
16.09.2009, 00:34
А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )

Gray_Wolf
16.09.2009, 00:45
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )
Что-то в этом конечно есть, но вот когда нужно парсить парочку многогиговых БД(часть из которых на Оракле, часть на М$ и часть на мускуле) то преимущество точно не на стороне перла :)
Перл хорош по части работы с текстом(м таким то названием :) ), но парсинг это не только обработка текста. Когда приходится использовать пару сотен потоков приходися задумыватся ещё и о инет канале(при чём не только на своей стороне, но и как этим парсером не повесить пару сайтов)

drim
16.09.2009, 01:17
1. При чём здесь интернет-канал? Если речь о множественных запросах к удалённому серверу, то никакой язык программирования не "спасёт" - данные должны быть переданы в необходимом объёме, прежде чем их начнёт обрабатывать скрипт/программа.
2. Что именно вы хотите парсить в базах данных? Бинарные файлы самой базы MS/My SQL'ей или партиции Oracle? Или дамп БД?
парсинг это не только обработка текста это и есть обработка ТЕКСТА
_http://ru.wikipedia.org/wiki/Парсинг

Gar|k
16.09.2009, 01:40
PERL наше всио, просто, удобно. но это если парсить текст аля html xml, ну можно извратится и парсить и бинарные данные. А так уже практически в каждом языке программирования есть свои регулярные выражения. А если и нету то легко найти библеотеку например PCRE (http://ru.wikipedia.org/wiki/PCRE)

В основном парсеры я писал для веб, IRC ботов ну и делал сплоиты для некотоых сайтиков и писал я их на PERL т.к он очень подходит для подобных задач

W!z@rD
16.09.2009, 06:55
ну и херню же вы несете... Пишу на дельфи, но нет бля, парсить буду на перле, извращаться и скрещивать их. Сильно, Мдоооооо.

для чего по вашему придумывались регулярные выражения?

Gar|k
16.09.2009, 18:24
W!z@rD, а кто сказал что мы пишем на делфи? мы и пишем на perl-е :) так что не надо вот тут...

Tigger
16.09.2009, 18:34
А блять при чем тут перл вообще? Вроде как тема только про Дельфи...

Chrome~
16.09.2009, 18:36
Но, если честно, писать парсеры, боты и т. д. на Delphi и других языках, - вовсе не бредовая идея. Если умеешь, конечно. Меня интересует, какие функции вы чаще всего используете для этой работы?

drim
16.09.2009, 22:08
В разных языках разные функции. Вы про какой спрашиваете? )

Gar|k
16.09.2009, 23:05
2 Chrome~, вот такие функции использую я

PERL
while($s=<$socket>)
{
$olds=$next;

$all=0;
if($s=~/\<td align=\"left\" valign=\"top\" class=\"decorBodyCell\"\>/){$on=1;next;}
if($s=~/\<\/td\>/){$on=0;next;}
if($s=~/\<a href=\"\.\.\/\"\>(.*)\<\/a\>\&nbsp\;\&nbsp\;\<a href=\"(.*)\">Вперед/){$all=1;$next=$2;next;}
if($s=~/\<\/p\>\<\/center\>/){next;}
if($s=~/\<p\>(<big>){3}\<strong\>(.*)\<\/strong\>(\<\/big\>){3}\<\/p\>/){$name_stat=$2;next;}
if($s=~/\<p\>\<big\>\<strong\>(.*)\<\/strong\>\<\/big\>\<\/p\>/){$autor_stat=$1;next;}
if($s=~/\<p\>\<strong\>(.*)\<\/strong\><\/p\>/){next;}
if($s=~/\<p\>\<img/){next;}
if($s=~/\<p class=\"textBody\">\<br\>/){next;}
if($s=~/\<hr/){next;}
if($s=~/\s\s\s\<\/p\>/){next;}

if($s=~/\<p\>\((.*)\)\<\/p\>/)
{
$mail_autor=$1;
if(!$mail_autor=~/[a-z_0-9-]@([a-z_0-9-]+\.)/){$mail_autor='';}
next;
}



#if($olds eq $next){last;}
if($on==1){$statya.=$s;}

}
$statya.="|||"; # obozn page
}


JS

r = str.match(/(?:operate|operatewall)\s*\x28\s*\d+\s*,\s*(\d+)\s *,\s*(\d+)\s*,\s*[\x22\x27](\w+)[\x22\x27]/i);


С

if((re=pcre_compile ((char *) pattern, PCRE_CASELESS|PCRE_MULTILINE, &error, &erroffset, NULL))==NULL){
printf("Error: %s\nSymbol N%i\nPattern:%s\n",error,erroffset,pattern);
getchar();
exit(1);

}
else
{
if((pairs=pcre_exec(re,NULL,str,4,0,PCRE_NOTEMPTY, vector,vecsize))<0){ printf("Error! num: %i\n",pairs);} ....


PHP

$id=preg_replace("/\D/","",$_POST['id']);


тупая тема...

ange007
17.09.2009, 23:38
Вот модуль с процедурами для облегчения парсинга страниц:
Скачать. (http://borisenko.at.ua/load/2-1-0-23)