Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

09.09.2009, 17:12
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме: 1247273
Репутация:
166
|
|
Помогите спарсить
Тренируюсь на делфи писать спамеры по ПМ во всяких онлайн-играх. Возникла проблема с парсингом списка юзеров.
Собственно после idHTTP.GET страницы получаю кусок исходного кода страницы, который необходимо "разобрать"
Код HTML:
class=header><b><a href=/tournaments/1021707>Премьер-лига: Кубок Друзей-11867</a> // 09.09.2009 09:50</td><tr bgcolor=white><td valign=top height=50px width=100%><li> <b>Призовой фонд:</b> 8.800<br><li> <b>Длительность:</b> до 120 минут<li> <b>Уровень игрока:</b> 2<li> <b>Опыт футболистам:</b> 200%<li> <b>Участники:</b><div style='text-color:#808080;'><img src=http://img.11x11.ru/images/vip/1.gif title=VIP-1 border=0 align=absmiddle> <a href=/users/1162508>Studio Neopixel</a> [2], <img src=http://img.11x11.ru/images/vip/1.gif title=VIP-1 border=0 align=absmiddle> <a href=/users/1024340>Манкунианцы</a> [2], <a href=/users/1111091>Team 2000</a> [2], <a href=/users/1131952>Sanyamba OiOiOi</a> [2], <a href=/users/1091744>Nell</a> [2], <a href=/users/1144478>kama2007</a> [2], <a href=/users/649301>kostyajuve</a> [2], <a href=/users/1167982>НОЛА</a> [2], <a href=/users/1079793>goshak</a> [2], <a href=/users/1134896>Шахтар Конотоп</a> [2], <a href=/users/1153154>FC Chita1978</a> [2], <a href=/users/1142245>masterdj</a> [2], <a href=/users/1074376>oukb34rus</a> [1], <a href=/users/1146091>Olegan059</a> [2], <a href=/users/1160340>Ramzay</a> [2], <a href=/users/1104367>franc87</a> [2], <a href=/users/1146681>revun</a> [2], <a href=/users/1150390>Ace me</a> [2], <a href=/users/1106890>NEXSUS007</a> [2], <a href=/users/867456>агро</a> [2], <a href=/users/1092127>Goal4win</a> [2], <a href=/users/569525>Palivo</a> [2], <a href=/users/1050513>DarkSithh</a> [2], <a href=/users/1159356>Big Pussy</a> [2], <a href=/users/1146657>Головастик</a> [2], <a href=/users/1162559>ФК_Захаров</a> [2], <a href=/users/1150710>Campeone</a> [2], <a href=/users/1164571>ser_vydy</a> [2], <a href=/users/737445>lukin</a> [2], <a href=/users/1158351>300_спартанцев</a> [2], <a href=/users/1121495>Elvis</a> [2], <a href=/users/1116768>Tezaur</a> [2], <a href=/users/699626>Kostik</a> [2], <a href=/users/1119587>FC Min-Vodi</a> [2], <a href=/users/964257>Honda</a> [2], <a href=/users/1123827>ilya_063</a> [2], <a href=/users/1164206>Carlos Digolas</a> [2], <a href=/users/1162052>FK_КУБАНЬ</a> [2], <a href=/users/865315>rHuga</a> [2], <a href=/users/691581>-AMKAP</a> [2], <a href=/users/1157737>UDAV</a> [2], <a href=/users/1083712>кривоногие мастера</a> [2], <a href=/users/1133280>gorokhov</a> [2], <a href=/users/1142904>Kireevsk</a> [2], <a href=/users/831618>AstaxOFF</a> [2], <a href=/users/1148913>NomadSTI</a> [2], <a href=/users/1169494>syava205</a> [2], <a href=/users/1125857>Fonakkz</a> [2], <a href=/users/1092961>ADor</a> [2], <a href=/users/1084072>Veliton Team</a> [2], <a href=/users/1034049>Paulo Maldini</a> [2], <a href=/users/1120628>Hesus77</a> [2], <a href=/users/1092822>robocop</a> [2], <a href=/users/1104672>ЛФК Эконом</a> [2], <a href=/users/1157637>serwer3000</a> [2], <a href=/users/1162500>vbctdbx</a> [2], <a href=/users/385760>УГНТУ</a> [2], <a href=/users/1168933>Italia-Juventus</a> [2], <a href=/users/1158407>Тутанхамон15</a> [2], <a href=/users/1164181>AlexUstaZZ</a> [2], <a href=/users/1156742>DINAMO BATUMI</a> [2], <a href=/users/1112183>Юрбанбанан</a> [2], <a href=/users/943444>Bingo1</a> [2], <a href=/users/1041527>ZYMA</a> [2]</div>
Процедура получения исходника страницы происходит элементарно: memo1.text := idhttp.get()
А получить мне надо только имя пользователя (для примера - <a href=/users/1146681>revun</a>, надо получить revun)
В "регулярках" и прочих хитростях не силен.
Помогите, кто чем горазд =)
|
|
|

09.09.2009, 18:07
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Делфи не знаю, попытался переделать с си++ билдера
stroka:AnsiString;
user:AnsiString;
stroka := idhttp.get();
while(stroka.Pos("<a href=/users/"))
begin
stroka.Delete(1, stroka.Pos("<a href=/users/"));
stroka.Delete(1, stroka.Pos(">"));
memo1.clear();
memo1.lines.add(stroka.SubString(1, stroka.Pos("<") - 1));
end;
в мемо1 получишь список всех юзеров
Последний раз редактировалось M_script_; 09.09.2009 в 18:38..
|
|
|

09.09.2009, 18:08
|
|
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме: 1313455
Репутация:
249
|
|
Я, как настоящий ламер ( потому что я тоже не силен в регулярках), написал бы что - то вроде этой процедуры:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
strText:string;
begin
strText:=memo1.text;
memo1.Text := '';
while pos('<a href=/users/',strText) <> 0 do begin
delete(strText,1,pos('<a href=/users/',strText));
memo1.Text := memo1.Text + copy(strText,pos('>',strText)+1,pos('<',strText)-pos('>',strText)-1)+#13#10;
end;
end;
Результат работы:
Код:
Studio
Neopixel
Манкунианцы
Sanyamba
OiOiOi
Nell
НОЛА
goshak
Шахтар
Конотоп
FC Chita1978
oukb34rus
Olegan059
franc87
revun
Ace
me
NEXSUS007
Goal4win
Palivo
DarkSithh
Big Pussy
lukin
Tezaur
FC Min-Vodi
Honda
Carlos
Digolas
ну и тд =)...
Последний раз редактировалось Dosia; 09.09.2009 в 18:12..
|
|
|

09.09.2009, 20:09
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
По моему вариант от Dosia оптимальный. С регулярками не советую работать, - процедура, как и сама программа, будет выполняется медленнее.
|
|
|

09.09.2009, 21:07
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
Chrome~
ну конечно, регулярки вообще какой то идиот придумал, настоящие трукодеры прогоняют массив процедурами и в каждой интерации цикла убирают ненужный текст. Садись два
|
|
|

09.09.2009, 22:00
|
|
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме: 4778940
Репутация:
1257
|
|
Chrome~, не на много медленнее. почти не заметно.
Spyder, я писал бекдор - делал примерно как Dosia, ибо регулярки больше 100 кб кода занимают. так что всё зависит от конкретного случая.
Последний раз редактировалось mr.The; 09.09.2009 в 22:02..
|
|
|

09.09.2009, 23:06
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Сообщение от Spyder
Chrome~
ну конечно, регулярки вообще какой то идиот придумал, настоящие трукодеры прогоняют массив процедурами и в каждой интерации цикла убирают ненужный текст. Садись два
Ты прям отличник получается?
Что бы применить регулярные выражения в Delphi нужно подключать модуль TRegExpr, благодаря которому сильно увеличивается размер программы. Я не особо работал в PHP и вообще не работал в Perl, но раз многие используют регулярки в этих языках, - у меня нет ничего против. Но регулярки в Delphi немного... неправильно. Помню, что на официальном сайте компонента было написано, что софт, который использует TRegExpr должен быть бесплатным. И все таки, подключать столь большую библиотеку ради этого дела наверное не стоит.
|
|
|

10.09.2009, 07:28
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Что бы применить регулярные выражения в Delphi нужно подключать модуль TRegExpr
читаем http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1062
и делаем выводы =\
хром завтра на ачат без родителей не приходи
mr.The касательно скорости, не знаю как в TRegExpr, но Regex (класс в .NET) позволяет собирать регулярку с ключем Compiled. Единожды она компилится и все. Увеличение производительности 10-15%. В твоем случае регулярка больше 100 строк кода? о_О
эммм.. ты чего парсил?))))
Compiled - http://habrahabr.ru/blogs/net/50413/
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|

10.09.2009, 17:02
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
читаем http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1062
Честно говоря, не знал об этом, спасибо тебе, обязательно почитаю.
===
Если еще раз перечитать наш разговор, можно заметить, что античат, - это та же школа. Один раздает двойки, другой вызывает родителей...
|
|
|

10.09.2009, 21:58
|
|
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме: 4778940
Репутация:
1257
|
|
mr.The касательно скорости, не знаю как в TRegExpr, но Regex (класс в .NET) позволяет собирать регулярку с ключем Compiled. Единожды она компилится и все. Увеличение производительности 10-15%. В твоем случае регулярка больше 100 строк кода? о_О
эммм.. ты чего парсил?))))
0_о однако. незнаю, я писал на с++, и там единственным вариантом было убрать это в длл. так как мне это всё-равно не подходило, я решил поизвращаться.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|