Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 1
Регистрация: 03.02.2013
Сообщений: 20

Парсинг web-страниц

05.05.2014, 17:01. Показов 2315. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане.
Задача заключается в следующем:
1) Грузим в компонент TWebBrowser страницу.
2) Сохраняем код страницы в переменную.
3) Достаем из кода страницы нужные значения.
Задача казалась бы легкой, если бы значение было бы одно... Но значений много и все нужно достать, при этом нужно сохранить каждое значение в TStringList на каждую строчку.
Подскажите пожалуйста, как это дело оформить? Одно значение я достаю, но вот последующие вообще не понимаю как достать
Пример кода страницы:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<tbody id="list_tbody">
                    <tr user="7942095" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="7942095"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/7942095" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/95/7942095_1397401983.png"></td> 
                        <td action="slide/profile/7942095" class="list_name pointer">DexHeim</td>  
                                                    <td rat="58" class="list_level yellow">58</td>
                            <td rat="52333843" class="list_level yellow">52333843</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
                        <tr user="7662596" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="7662596"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/7662596" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/96/7662596_1392182663.png"></td> 
                        <td action="slide/profile/7662596" class="list_name pointer">Gavroche</td>  
                                                    <td rat="54" class="list_level yellow">54</td>
                            <td rat="23000101" class="list_level yellow">23000101</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
                        <tr user="178281697" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="178281697"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/178281697" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/197/178281697_1389095077.png"></td> 
                        <td action="slide/profile/178281697" class="list_name pointer">[в™›MSRв™›] Владос Нелогичный</td>  
                                                    <td rat="53" class="list_level yellow">53</td>
                            <td rat="20655314" class="list_level yellow">20655314</td>
                                                                <td title="Р&#152;зраиль" action="listed/nation/il" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/il.png"></td> 
                                                </tr>
                        <tr user="138594794" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="138594794"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/138594794" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/294/138594794_1397538893.png"></td> 
                        <td action="slide/profile/138594794" class="list_name pointer">Jean Batist Russo</td>  
                                                    <td rat="52" class="list_level yellow">52</td>
                            <td rat="18434468" class="list_level yellow">18434468</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
                        <tr user="44702331" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="44702331"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/44702331" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/331/44702331_1397809150.png"></td> 
                        <td action="slide/profile/44702331" class="list_name pointer">Jacques Chirac</td>  
                                                    <td rat="50" class="list_level yellow">50</td>
                            <td rat="12509665" class="list_level yellow">12509665</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
                        <tr user="5515919" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="5515919"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/5515919" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/419/5515919_1376647110.png"></td> 
                        <td action="slide/profile/5515919" class="list_name pointer">[в™›MSRв™›] Алекс Бер</td>  
                                                    <td rat="49" class="list_level yellow">49</td>
                            <td rat="9997768" class="list_level yellow">9997768</td>
                                                                <td title="Украина" action="listed/nation/ua" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/ua.png"></td> 
                                                </tr>
                        <tr user="79068195" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="79068195"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/79068195" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/195/79068195_1398884386.png"></td> 
                        <td action="slide/profile/79068195" class="list_name pointer">British Brother</td>  
                                                    <td rat="49" class="list_level yellow">49</td>
                            <td rat="9234004" class="list_level yellow">9234004</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
                        <tr user="231718156" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="231718156"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/231718156" class="list_avatar pointer"><img width="50" height="50" src="/static/avatars/normal/156/231718156_1389313396.png"></td> 
                        <td action="slide/profile/231718156" class="list_name pointer">[в™›MSRв™›] Jason Statham</td>  
                                                    <td rat="47" class="list_level yellow">47</td>
                            <td rat="6909402" class="list_level yellow">6909402</td>
                                                                <td title="Аргентина" action="listed/nation/ar" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/ar.png"></td> 
                                                </tr>
                        <tr user="65041807" stamp="1399294739" class="list_link header_buttons_hover"> 
                <script>$(document).ready(function() { $('tr[user="65041807"][stamp!="1399294739"]').remove(); });</script>
                                        <td action="slide/profile/65041807" class="list_avatar pointer"><img width="50" height="50" src="//vk.com/images/camera_c.gif"></td> 
                        <td action="slide/profile/65041807" class="list_name pointer">[в™›MSRв™›] Макарошка</td>  
                                                    <td rat="46" class="list_level yellow">46</td>
                            <td rat="5376810" class="list_level yellow">5376810</td>
                                                                <td title="Франция" action="listed/nation/fr" class="tip list_avatar pointer"><img width="48" height="48" style="margin-left: 10px; margin-top: 3px; margin-right: 10px;" src="/static/images/flags/fr.png"></td> 
                                                </tr>
Нужно достать значения user="номер", а точнее только номер.
Для парсинга значений пользуюсь функцией
Delphi
1
2
3
4
5
6
function Pars(str:String;str_begin:String;str_end:String;count:integer):String;
begin
   Delete(str,1,pos(str_begin,str)+length(str_begin)-1);
   Delete(str,pos(str_end,str)-count,length(str));
   Pars:=str;
end;
Возможно нужно идти в сторону цикла... Заранее спасибо за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2014, 17:01
Ответы с готовыми решениями:

Парсинг страниц с DELPHI
Доброго времени суток! В приложении есть элемент парсинга страниц. при запуске на новых машинах, где отсутствует Делфи, выдает ошибку...

Парсинг страниц в браузере
Возможно ли изменить HTML код страницы, например в той же мозиле? Не нужно говорить, что это дурное дело, я делаю это для изменения...

Парсинг страниц в цикле
Мне нужно парсить страницы в цикле, для этого я сначала получаю часть адреса из combobox-a в массив j:=0; for i:=1 to...

5
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,652
Записей в блоге: 21
05.05.2014, 22:07
Цитата Сообщение от BeerMix Посмотреть сообщение
при этом нужно сохранить каждое значение в TStringList на каждую строчку.
непонятно, что куда на каждую строчку?

рискну телепатировать:
перед нами обычная текстовая строка.

функция Pos определяет позицию подстроки user=", или что там нужно находить
через 6 символов начинается нужный нам текст, заканчивающийся на "
получили строку, добавили к StringList

повторять сколько там нужно раз
0
0 / 0 / 1
Регистрация: 03.02.2013
Сообщений: 20
05.05.2014, 22:24  [ТС]
В смысле новое значение на новую строчку в TStringList путем обычного добавления.
Нужное значение не всегда через 6 символов.
Да и находить он будет каждый раз одно и тоже, если в цикл засунуть, а нужно сделать так, чтобы он передвигался как бы по тексту, доставая нужные значения и записывая в TStringList.
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
05.05.2014, 22:46
HTML в Delphi
Работа с ссылками.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,652
Записей в блоге: 21
05.05.2014, 23:16
находить будет то что попросишь, а не каждый раз одно и то же

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
keyStrings:array [0..2] of string = ('user="','pass="','role="');
 
for i:=0 to high(keyStrings) do
begin
  x:=pos(keyStrings[i], bigHTMLstring);
  if x<>0 then
  begin
    len:=length(keyStrings[i]);
    //пропустить len букв и считывать строку до " или до конца bigHTMLstring
    s:=...
    StrList.add(S);
  end;
end;
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
06.05.2014, 00:29
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.Button1Click(Sender: TObject);
var S,resultS:TStringList;   //S - контейнер с исходным HTML, resultS c выходным
    tekpos,pos2:Integer;     //Текущая позиция курсора и позиция для поиска следующих за ним кавычек
     temp:String;        //Временная строка, для лучшей читаемости кода просто
    const user_key='<tr user="';   //По коду скорее всего ключевое значение для поиска идентификаторов юзеров
 
begin
 
  S:=TStringList.Create;
  ResultS:=TStringList.Create;
  tekpos:=0;
 
  //   S.LoadFromFile('M:\test.html');       // В S уже загружен весь HTML, это не сложно
  S.Text:=WebBrowser1.OleObject.Document.Body.InnerHTML; //Загрузить с HTML страницы в контейнер для обработки
    repeat
          tekpos:=posex(user_key,S.Text,tekpos+1);
          if tekpos=0 then break;  //Чтоб цикл один лишний раз не выполнялся, вежливо его просим на выход
          pos2:=posex('stamp',S.Text,tekpos+1)+length(user_key);
          temp:=Copy(S.Text,tekpos+length(user_key),pos2-tekpos-1);
          temp:=Copy(temp,1,pos('"',temp)-1);
          resultS.Add(temp);      //Добавляем полученную строку в нужный контейнер
     until tekpos=0;
 
     ShowMessage(resultS.Text);          //В контейнере только ID юзеров
  resultS.Free;
  S.Free;
 
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2014, 00:29
Помогаю со студенческими работами здесь

Парсинг строк с нескольких страниц
Всем привет! В общем такая вот проблема, нужно спарсить логины с нескольких страниц, все ни как не могу это сделать... procedure...

Парсинг нескольких страниц в цикле
Как сделать что бы парс был по другим страницам сайта, на пример парсить 5 страниц, и надо с каждой страницы включая 5, спарсить значения,...

Парсинг интернет страниц. Нахождение в html ip и mac адреса
Доброго времени суток. Подсобите кодом пожалста. Есть программа которая при помощи indy get делает запрос arp таблицы на модеме по адресу...

Парсинг HTML страниц. Перечень URL записан в Memo.
Вот вопрос. Надо спарсить текст с сайтов указаных в мемо. Однопоточным приложением. Догадуюсь как все должно быть. Кто поможет. Как...

Парсер web-страниц и загрузка иконок
Здравствуйте. Решил склепать для собственных нужд загрузчик иконок с сайта IconSearch. Сделал уже работающий вариант, который по списку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru