![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Код HTML:
Добрый день уважаемые, подскажите плиз, каким путём целесообразно вытащить необходимые мне данные выделенные жирным шрифтом со страницы. Т.е. мне нужно: нашёл первое слово 'Участников' , нашёл количество участников '0 из 32',проанализировал сколько и нашёл строку со ссылкой '/tournaments/4970598/act=join&step=1'. Как это лучше реализовать? Последний раз редактировалось Admin, 07.09.2012 в 13:46. |
|
#2
|
||||
|
||||
|
его можно отнести к правильно построеному XML? честно говоря самому лень это проверить по понятной причине)
|
|
#3
|
|||
|
|||
|
это кусок исходного кода в браузерной игрухе.
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
См. последнюю ссылку в подписи.
|
|
#6
|
||||
|
||||
|
RegExp тебе в помощь
http://forum.vingrad.ru/articles/topic-213075.html |
| Этот пользователь сказал Спасибо Lost_Fish за это полезное сообщение: | ||
morik44 (07.09.2012)
| ||
|
#7
|
|||
|
|||
|
Цитата:
А так в кратце то не подсказать чтоли? |
|
#8
|
||||
|
||||
|
Ты открываешь страницу с помощью TWebBrowser? Можно так же парсить html-страничку его средствами.
|
|
#9
|
||||
|
||||
|
Цитата:
![]() |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
morik44 (07.09.2012)
| ||
|
#10
|
|||
|
|||
|
Цитата:
|
|
#11
|
|||
|
|||
|
poli-smen, а с помощью TWebBrowser каким методом легче пропарсить?
|
|
#12
|
||||
|
||||
|
Код:
var document: IHTMLDocument2; begin document:=WebBrowser.Document as IHTMLDocument2; ... |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
morik44 (07.09.2012)
| ||
|
#13
|
|||
|
|||
|
всем спасибо, буду пробовать)
|
|
#14
|
||||
|
||||
|
Та вашу дивизию...
Чем дальше, тем больше убеждаюсь что порой на форумах можно получить самые бесполезные и неоптимальные ответы. Человек просит вытащить из однотипной структуры <b>Участников:</b> 0 из 32</div></td></tr><tr bgcolor=white><td height=10px ><center><b></b></center><a href=/tournaments/4970671/act=join&step=1 ><b> <b>Участников:</b> 0 из 16</div></td></tr><tr bgcolor=white><td height=10px ><center><b></b></center><a href=/tournaments/4973598/act=join&step=1 ><b> <b>Участников:</b> 3 из 16</div></td></tr><tr bgcolor=white><td height=10px ><center><b></b></center><a href=/tournaments/4970554/act=join&step=1 ><b> <b>Участников:</b> 1 из 16</div></td></tr><tr bgcolor=white><td height=10px ><center><b></b></center><a href=/tournaments/4973288/act=join&step=1 ><b> <b>Участников:</b> 0 из 32</div></td></tr><tr bgcolor=white><td height=10px ><center><b></b></center><a href=/tournaments/4970598/act=join&step=1 ><b> и все? Наф ему регулярные выражения?? Что еще посоветуете подключить? Асм вставки и джава скрипт? А еще не забываем о модуле на руби. Ни и конечно кнопку твитнуть, куда ж без нее?? А лайкнуть в ФБ? Или опубликовать вконтакте?? Куда мы катимся???? |
| Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение: | ||
morik44 (07.09.2012)
| ||
|
#15
|
||||
|
||||
|
Код:
procedure TForm1.Button6Click(Sender: TObject);
var
i,n:integer;
s:string;
t1,t2,t3:string;
begin
s:=memo1.Text; //не обязательно с мемо, можно откуда угодно, где есть свойство текст.
n:=length(s)-145; //длина текста
for i:=1 to n do
if s[i]='У' then //ищем номер позиции буквы "У", от него и будем "плясать"
begin
if s[i+1]='ч' then
if copy(s,i+2,8)='астников' then
begin
if s[i+18]='и' then //21-я после буквы "У", и между "0 из 32"
begin
t1:=s[i+16]; // 0 16-я после буквы "У"
t2:=copy(s,i+21,2); //32 21-я после буквы "У",длина 2
t3:=copy(s,i+106,36); //ccылка 106-я после буквы "У",длина 36
memo1.Lines.add(t1); //тут результат. просто показал в мемо, а можно где угодно использовать переменные т1 т2 т3
memo1.Lines.add(t2);
memo1.Lines.add(t3);
end
else
begin //этот код на случай если "11 из 32" или "25 из 32" ( если таких случаем нету, выбрасываем проверку на "и"
t1:=copy(s,i+16,2);
t2:=copy(s,i+22,2);
t3:=copy(s,i+107,36);
memo1.Lines.add(t1);
memo1.Lines.add(t2);
memo1.Lines.add(t3);
end;
end;
end;
end;получим один быстрый цикл for i:=1 to n do if s[i]='У' then который позволит быстро выделить нужные области. вероятность что текст игры(я почему то подумал что тут футбольный эмулятор, а оказывается покер-сайт) будет переполнен словами скажем "Ученик", очень мала. Операторы внутри цикла после if в 99% будут выпоняться в нужных местах. дополнительная проверка if copy(s,i+2,8)='астников' then и вытаскиваем данные: t1:=copy(s,i+16,2); t2:=copy(s,i+22,2); t3:=copy(s,i+107,36); И того: мы получаем быструю, понятню даже тем, кто только начинает программировать и выучил: length for if copy memo.lines.add( т.е. и ежу понятный код. Для полного счастья поясняем в комментариях значения постоянных 16,22,107,2,36 (хотя и так понятно, что это места и длины искомых строк). (если планируется использовать в большой программе оформляем в виде процедуры/функции). И никакого: руби,джава, лайка в твиттере и публикации в ФБ, никаких дополнительных библиотек и модулей. Последний раз редактировалось @Rafa3L, 07.09.2012 в 20:14. |
| Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение: | ||
morik44 (07.09.2012)
| ||