Позволяют легко и надежно достать нужную информацию с сложной, динамической структуры набор данных.
parserstart - подготавливает парсер к работе. В виде параметра принимает стоку string, тект который будем парсить. Обнуляет позицию начала парсинга на 0.
Цитата:
parserstart("В этом тексте будем искать");
Возвращает 1 в любом случае.
parser - осуществляет поиск данных.
CODE:
parser(-1, "<h3 class=^"font-x1 btmspace-30^"><i class=^"fa fa-2x(.*)-10^"></i> <a href=^"", #link[n], 200, "^">");
Первый параметр - удаленность на количество символов от предыдущего найденного с помощью этой функции или -1 если не учитывать.
Если удаленность найденного превышает этот параметр функция вернет 0.
Второй параметр - Регулярное выражение, описывающее текст, который должен идти перед искомыми данными.
Допускается указывать через запятую (следующими параметрами различные варианты этого текста.
Пример:
CODE:
parser(50, "<p>", "<br>", #link[n], 1000, "</p>", "</b>")
Означает что перед нужными данными может быть либо
CODE:
, либо "<p>"
CODE:
"<br>"
Третий параметр - Указатель на одномерный массив string, в который запишется найденная информация.
Четвертый параметр - ожидаемая длина в символах искомых данных. Если длина превысила - функция вернет 0.
Пятый параметр - Регулярное выражение, описывающее текст, который должен идти после искомых данных.
Допускается указывать через запятую (следующими параметрами различные варианты этого текста.
===================
Так же допускается не обязательный последний параметр
0 или 1
Синтаксис:
CODE:
parser(50, "<p>", #S, 1000, "</p>", 0)
CODE:
parser(50, "<p>", #S, 1000, "</p>", 1)
0 - Означает что будет найдено первое длинное вхождение, (как и без параметра).
1 - Будет найдено самое короткое вхождение заканчивающееся регулярным выражением которое означает конец подстроки.
Пример:
В самом тексте После чего или Перед чем можно указывать элементы регулярных выражений.
Пример:
Найдет то и то
Цитата:
string text = "
";
//string text = "
Можно и так:
Просто перечислив все что может быть
//string text = "
";
string result;
messagebox(text);
parserstart(text);
if(parser(-1, "div id=^"g_[0-9]_", #result, 100, "^" title", 1)==1)
{
messagebox(result);
}
else messagebox("Не найдено");
string result;
messagebox(text);
parserstart(text);
if(parser(-1, "div id=^"g_[0-9]_", #result, 100, "^" title", 1)==1)
{
messagebox(result);
}
else messagebox("Не найдено");
Можно и так:
Просто перечислив все что может быть
Цитата:
string text = "
";
//string text = "
В случае успеха возвращает 1.
Неудачи - 0.
Последующий вызов функции parser производит поиск от финальной позиции предыдущего найденного.
Позиция на 0 сбрасывается функцией parserstart
Пояснение на примере парсинга сайта
Используемый код
Парсинг OLX на предмет появления в продаже нового автомобиля в Визуальном редакторе
//string text = "
";
string result;
messagebox(text);
parserstart(text);
if(parser(-1, "div id=^"g_1_", "div id=^"g_0_", #result, 100, "^" title", 1)==1)
{
messagebox(result);
}
else messagebox("Не найдено");
string result;
messagebox(text);
parserstart(text);
if(parser(-1, "div id=^"g_1_", "div id=^"g_0_", #result, 100, "^" title", 1)==1)
{
messagebox(result);
}
else messagebox("Не найдено");
CODE:
Найдет между первым > и первым < после первого >
<td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 0);
messagebox (S);
Найдет между первым > и первым < после первого >
<td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 0);
messagebox (S);
CODE:
Найдет между первым > перед первым <
Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 1);
messagebox (S);
Найдет между первым > перед первым <
Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 1);
messagebox (S);
В случае успеха возвращает 1.
Неудачи - 0.
Последующий вызов функции parser производит поиск от финальной позиции предыдущего найденного.
Позиция на 0 сбрасывается функцией parserstart
Пояснение на примере парсинга сайта
Используемый код
Код (Отобразить)
Парсинг OLX на предмет появления в продаже нового автомобиля в Визуальном редакторе
2. Ilya001 - 10 Января, 2022 - 07:21:08 - перейти к сообщению
3. Kibor - 10 Марта, 2022 - 11:05:59 - перейти к сообщению
Доработка parser
Так же допускается не обязательный последний параметр
0 или 1
Синтаксис:
0 - Означает что будет найдено первое длинное вхождение, (как и без параметра).
1 - Будет найдено самое короткое вхождение заканчивающееся регулярным выражением которое означает конец подстроки.
Пример:
Так же допускается не обязательный последний параметр
0 или 1
Синтаксис:
CODE:
parser(50, "<p>", #S, 1000, "</p>", 0)
CODE:
parser(50, "<p>", #S, 1000, "</p>", 1)
0 - Означает что будет найдено первое длинное вхождение, (как и без параметра).
1 - Будет найдено самое короткое вхождение заканчивающееся регулярным выражением которое означает конец подстроки.
Пример:
CODE:
Найдет между первым > и первым < после первого >
<td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 0);
messagebox (S);
Найдет между первым > и первым < после первого >
<td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 0);
messagebox (S);
CODE:
Найдет между первым > перед первым <
Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 1);
messagebox (S);
Найдет между первым > перед первым <
Феникс 555-22-22, Кирилл, Донецк
string T="</td> <td class=^"s1^" dir=^"ltr^"> Феникс 555-22-22, Кирилл, Донецк </td> <td class=^"s0^"></td><td class=^"s0^">";
messagebox (T);
parserstart(T);
string S;
parser(-1, ">", #S, 100, "<\/td", 1);
messagebox (S);