Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/42: Рейтинг темы: голосов - 42, средняя оценка - 4.76
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43

Данные с web-страницы

11.08.2009, 16:28. Показов 8340. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!! У меня такой вопрос к знающим людям:
Как вытащить число, с веб страници?

Например:
Как сделать так чтобы в проге написаной на c++Builder показывало.... ну допустим сколько у меня новых писем на почте( тоесть как вставить " Новых сообщений 10"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.08.2009, 16:28
Ответы с готовыми решениями:

Получить данные с WEB-страницы, модифицировать и отправить обратно
У меня следующая задача. Предположим я нахожусь в интернете на каком нибудь сайте. На экране присутствуют различные окна, кнопки и т.д ....

Требуется вытащить данные с web страницы в excel
Мне нужно из сетевого сайта вытащить несколько таблиц для анализа(периодичность 2 раза в месяц) средствами excel у меня не получилось...

Как отправить данные с web страницы на Websoket сервер
Доброго времени суток! Есть php Websocket сервер (Workerman) и множество клиентов в виде устройств (ESP8266), которые обмениваются между...

22
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
11.08.2009, 16:38
C++
1
2
int n= 10;
cout <<"Новых сообщений: " <<n <<"\n";
0
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
11.08.2009, 16:40  [ТС]
ха ха очень смешно =)
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
11.08.2009, 16:58
просто.. пишешь парсер, и ищешь число заключенное в твою конструкцию (теги например).
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
11.08.2009, 16:59
А может ему нужен протокол POP3 ?
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
11.08.2009, 17:08
odip, во-первых, какой вопрос - такой ответ,
во-вторых:
Цитата Сообщение от Zhenya777 Посмотреть сообщение
Как вытащить число, с веб страници?
веб-страница - это текстовая информация. а текст подвержен парсингу.
как он будет получать эту веб-страницу (используя компоненты, работая напрямую с сокетами, etc) меня не волнует.

Добавлено через 2 минуты 6 секунд
про парсинг можно почитать тут
1
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
19.08.2009, 16:36  [ТС]
Почитал я на счет парсинга.... что то не посилам он мне. Вот мне в голову взбрела такоя идейка (незнаю на сколько это реально или нет). Возможноли этот исходный код страници загрузить... ну допустим в Memo?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 17:03
А что конкретно тебе не под силу. Я могу помочь. Простенький парсинг для твоей задачи сделать оочень легко. Нам ведь не нужно выявлять всю структуру страницы, а найти только один конкретный элемент.
Скажи какой сервер почты, а там будем смотреть

В Memo - легко.

Добавлено через 3 минуты 23 секунды
Хош я дам тебе исходник проги, которая берет данные с сайта о курсах валют? Или прога которая проверяет обновления манги на сайте www.mangashare.com. Могу даже дать исходник проги которая закачивает файлики с megaupload с распознаванием каптчи. Во всех этих программах я извлекаю из HTML странички данные и что-то с ними там делаю.
2
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
19.08.2009, 17:23  [ТС]
Ну если есть желание помочь былбы тебе очень благадарен.
Такая ситуация на странице есть 4 числа которые мне надо от туда вытацить. А как это сделать я не представляю. Если не трудно то подскажи как это сделать.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 17:31
Давай сначала разберемся какой сервер почты(mail, gmail...). Потом какие 4 числа? Входящие, исходящие, отправленные, черновики?
1
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
19.08.2009, 17:35  [ТС]
mail Да и все остальное ты правельно указал
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 18:16
Смотри. Самый простой путь - воспольоваться idPOP3 компонентом для того, чтобы можно было получать смотреть сообщения. Только ты не увидишь отправленых, черновиков. И получить количество новых тоже не сможешь, а лишь общее колличество(хотя надо просто запоминать какие уже были, а каких еще не было).

Второй способ - парсить страницу mail.
Заходим на страничку http://win.mail.ru/cgi-bin/start?back=1, открываем HTML код и видим:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<tr>
<td><a href="msglist?folder=0&1746516578"><img align=absmiddle src=http://img.imgsmail.ru/mail/ru/images/start_inbox.gif width=31 vspace=2 height=21></a>&nbsp;&nbsp;<a href="msglist?folder=0&1112681615"><b>Входящие</b></a></td>
<td>&nbsp;</td>
<td>1</td>
</tr>
 
<tr>
<td><a href="msglist?folder=500000&2016378037"><img align=absmiddle src=http://img.imgsmail.ru/mail/ru/images/start_sent.gif width=31 height=21 vspace=2 alt="Отправленные"></a>&nbsp;&nbsp;<a href=msglist?folder=500000&1364655949><b>Отправленные</b></a></td>
<td>&nbsp;</td>
<td>3</td>
</tr>
 
<tr>
<td><a href="msglist?folder=950&1166735720"><img align=absmiddle src=http://img.imgsmail.ru/mail/ru/images/start_bulk.gif width=31 height=21 vspace=2></a>&nbsp;&nbsp;<a href="msglist?folder=950&1486054029"><b>Сомнительные</b></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="clearfolder?folder=950&confirm=on&next=start&284857959" class=clear_fold onClick="return bulk_confirm();">очистить</b></a></td>
<td>&nbsp;</td>
<td>0</td> 
</tr>
Получив эту страничку мы должны найти слово "Входящие", и отсчитать 10 переходов тег-нетег-тег(или наоборот), следующий нетег будет числом писем в этой папке. Так же само нужно сделать и с остальными папками.
А вот получить HTML код этой странички - это уже будет посложнее. Надо посмотреть как логинится браузер к серверу, и как тот ему отвечает.

Добавлено через 13 минут 24 секунды
Смотри как интересно общается internet explorer с сервером mail:

Я шлю. По нажатию войти
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST /cgi-bin/auth HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://www.mail.ru/
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: win.mail.ru
Content-Length: 53
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: Mpopl=813532263; mrcu=7F594A8C0685F476F1FDE9D865F; FTID=000AQ0r5MGg; p=j4klAgjwwAA; searchuid=230740411250690673
 
Login=МОЙ ЛОГИН&Domain=mail.ru&Password=МОЙ ПАРОЛЬ
Мне приходит:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 302 OK
Server: nginx/0.7.41
Date: Wed, 19 Aug 2009 14:07:09 GMT
Content-Type: text/html
Connection: close
Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAABABMIxAcA; expires=Mon, 15 Feb 2010 14:07:09 GMT; path=/; domain=.mail.ru
Set-Cookie: Mpop=1250690829:585a054601425b0619050219091d011b0302074f6a5d5e465e070207041d027d00185f5051575f5e585e5e5e41505d165450595a164047:nihonniikitai@mail.ru:; expires=Tue, 17 Nov 2009 14:07:09 GMT; path=/; domain=.mail.ru
Location: http://win.mail.ru/cgi-bin/checkcookie?id=585a054601425b061905019091d01b0302074f6a5d5e46e070207041d027d00185f5051575f5e585e5e5e41500595a164047
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Tue, 19 Aug 2008 14:07:09 GMT
Last-Modified: Wed, 19 Aug 2009 18:07:09 GMT
Content-Length: 165
 
<HTML>http://win.mail.ru/cgi-bin/checkcookie?id=585a054601425b00219091074f65e070207041d05051575f5e585e5e5e41505d165450595a164047</HTML>
Как видишь сервак меня перенаправил на проверку какой то печенек.

Мой браузер идет туда:
Code
1
2
3
4
5
6
7
8
9
10
11
GET /cgi-bin/checkcookie?id=585a054601425b06190074f6a5d5e465e070207041d85f5051575f5e41505d165450595a164047 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://www.mail.ru/
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: win.mail.ru
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: Mpopl=81353223; mrcu=7F58C068D5F476F1FDE9D865F; FTID=000AQ0r5MGg; p=j4klAgdjwAA; searchuid=230774411250690673; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABABMIxAcA; Mpop=1250690829:585a054601425b06190091d011b0302074f6a5d5e465d165450595a164047:ПОЧТА@mail.ru:
Сервак говорит, что все ОК, отвечая мне вот так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
HTTP/1.1 302 Found
Server: nginx/0.7.41
Date: Wed, 19 Aug 2009 14:07:09 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: close
Location: http://win.mail.ru/cgi-bin/start?back=1
 
1e9
<html>
<head><title>Redirect to http://win.mail.ru/cgi-bin/start?back=1</title></head>
<body><a href="http://win.mail.ru/cgi-bin/start?back=1">http://win.mail.ru/cgi-bin/start?back=1</a></body>
</html>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://win.mail.ru/cgi-bin/start?back=1">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.41 Server at win.mail.ru Port 80</ADDRESS>
</BODY></HTML>
 
0
Тоесть нас опять перенаправили. Но уже теперь нужно просто получить страницу по адресу http://win.mail.ru/cgi-bin/start?back=1, и мы там где нужно.

Твоя задача повторить этот процес авторизации своей прогой.
1
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
19.08.2009, 20:48  [ТС]
А с помощь какой программы ьы это получил???

Добавлено через 14 минут 56 секунд
и подскажи поте пожалуйсто где можно почитать что с этим делать =)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 20:55
Мне самому это стало интересно. Заголовки я получил с помощью плагина ieHTTPHeaders к Internet Explorer. Регистрацию можно делать с помощью различных способов: простыми сокетами, Indy, FastNet. Я только что смастерил такое с помощью Indy(idHTTP) вот только я не пойму чего-то вот такая проблема: Прошел процедуру аутентификации один раз, и теперь сервак мне уже её не требует, как разлогинится я не знаю(хотя это наверное и не нужно).
Вопрос откуда сервер знает что я это я? Куки ведь я не сохраняю. Или IdCookieManager из пакета индейцев сам их куда-то сохраняет автоматически?
1
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
19.08.2009, 21:01  [ТС]
А напиши пожалуйсто код, как ты залогинился )
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 21:17
Вот, смотри. Правда не знаю как он будет у тебя работать, но я уже разлогинится не могу.
C++
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include<myclasses.cpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IdCookieManager"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String Login="";//Твой логин
String Password="";//Твой пароль
 
 
TIdMultiPartFormDataStream*request=new TIdMultiPartFormDataStream();
request->AddFormField("Login",Login);
request->AddFormField("Domain","mail.ru");
request->AddFormField("Password",Password);
String response;
try{response=HTTP->Post("http://win.mail.ru/cgi-bin/auth",request);}catch(...){}
delete request;
Memo1->Text=response;
if(!CheckForProp(response))
        {//Странно, но этот кусок(он как видите недоделанный), ненужен. Сервер идет по упрощенной системе авторизации
        THtmlPage page;
        page.Init(response.c_str(),response.Length());
        TStringList*list=page.BreakToToken();//Типа парсим страницу
        String url;
        for(int i=0;i<list->Count;i++)
                {
                if(list->Strings[i].Pos("http://win.mail.ru/cgi-bin/checkcookie")!=0)
                        {
                        if(list->Strings[i].Pos("Location:")==0)
                                {
                                url=list->Strings[i];
                                url=url.SubString(1,url.Length()-2);
                                break;
                                }
                        }
                }
        delete list;
        response=HTTP->Get(url);
        Memo1->Text=response;
        CheckForProp(response);
        }
}
//---------------------------------------------------------------------------
 
//ФУНКЦИЯ ПАРСИТ СТРАНИЦУ
bool TForm1::CheckForProp(String& s)
{
THtmlPage page;
page.Init(s.c_str(),s.Length());
TStringList*list=page.BreakToToken();//Типа парсим страницу
String url;
for(int i=0;i<list->Count;i++)
        {
        if(list->Strings[i].Pos("Входящие")!=0)
                {
                i+=10;
                Vhod=StrToInt(list->Strings[i]);
                Label1->Caption=list->Strings[i];
                }else
        if(list->Strings[i].Pos("Отправленные")!=0)
                {
                i+=10;
                Otpr=StrToInt(list->Strings[i]);
                Label2->Caption=list->Strings[i];
                }
        if(list->Strings[i].Pos("Черновики")!=0)
                {
                i+=10;
                Chern=StrToInt(list->Strings[i]);
                Label3->Caption=list->Strings[i];
                }
        if(list->Strings[i].Pos("Сомнительные")!=0)//слово сомнительные встречается 2 раза. Нам надо то, где нету кавычек
                {
                if(list->Strings[i].Pos("\"Сомнительные\"")==0)
                        {
                        i+=15;
                        Spam=StrToInt(list->Strings[i]);
                        Label4->Caption=list->Strings[i];
                        }
                }
        }
delete list;
}
Вложения
Тип файла: rar mailViewer.rar (4.5 Кб, 61 просмотров)
Тип файла: rar myclasses.rar (10.8 Кб, 72 просмотров)
2
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
19.08.2009, 21:53
Странно как-то. Теперь он идет по системе:
POST логин пароль -> готовая страница доступа к ящику.
В первый раз, когда тестировал, шла по той сложной схеме с проверкой куков и тд, а теперь чего-то по упрощенной. Даже и не знаю почему так. Но так даже проще.
0
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
25.08.2009, 11:28  [ТС]
Облазил весь итернет, не нашел как решить эту проблему. При компиляции твоего иходника выдает такую ошибку

[C++ Warning] Dialogs.hpp(437): W8058 Cannot create pre-compiled header: initialized data in header
[C++ Error] Unit1.cpp(7): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(9): E2090 Qualifier 'TForm1' is not a class or namespace name
[C++ Error] Unit1.cpp(9): E2040 Declaration terminated incorrectly
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.08.2009, 14:36
А какой у тебя билдер? А есть ли у тебя Indy, и какой версии?
0
1 / 1 / 1
Регистрация: 11.08.2009
Сообщений: 43
26.08.2009, 13:42  [ТС]
C++Builder 6 Indy тоже есть а какая версия я не знаю, и не знаю где посмотреть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.08.2009, 13:42
Помогаю со студенческими работами здесь

Web страница внутри Web страницы
Всем привет! Есть необходимо обеспечить возможность просматривать веб-страницу с другой веб страницы. Т.е. что бы внутри страницы была...

Автосерф web страницы
Привет парни помогите мне нужна прога которая будет открывать web страницу парсируя её директории через 2-сек вот пример вот так ...

Просмотр Web страницы
Есть JFrame, в котором небоходимо отобразить web страницу. В странице есть картинки JavaScript и CSS. Что мне использовать если JTextPane...

Парсинг WEB страницы
Я только учусь, сильно не пинайте. Сразу в начале столкнулся с проблемой что при обращеннии к div блока сайта, не могу его получить,...

Динамические web-страницы
В новом окне вывести все элементы, являющиеся непосредственными потомками элемента с указанным в поле ввода Id. Открытие нового окна и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru