Парсинг *.html на C++ Builder

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by miniden, 6 Mar 2010.

  1. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    Нужно чтобы программа лезла на сайт, и брала сохраняла в переменную определенный участок сайта. Я так понимаю его надо пропарсить и по маске сохранить нужный фрагмент. Пытался вот это _https://forum.antichat.ru/showpost.php?p=373579&postcount=6 но не знаю как установить библиотеку wsock32.lib , а компилятор на нее ругается. Может метод и не правильный, роскажыте пожалуйста. скачал и установил это http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en от туда скопировал папку lib в папку lib борланда, но наверно так не делаеться...
    Пример:
    Я отправляю по адресу http://www.google.com/search?q=antichat&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:eek:fficial&client=firefox

    в параметре q слово antichat, а программа должна вывести заданый текст, допустим дескрипшн первый This is a discussion forum by Antichat.ru. Официальный форум АНТИЧАТ.РУ.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Вместо
    Code:
    #pragma comment( lib, "wsock32.lib" )
    
    попробуй напиши
    Code:
    #pragma comment(lib,"ws2_32.lib")
    
     
    _________________________
    3 people like this.
  3. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    Code:
    [Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
    [Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
    [Linker Error] Unresolved external 'WinMain' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\C0W32.OBJ
    
    
     
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://www.codepedia.com/wiki/printer.aspx?WikiID=1&p=CppBuilderLinkingErrors
     
    _________________________
  5. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    Я так понял говорит мне что я пытаюсь работать в консольном приложении, но мне то надо не консольное. Может эту задачу по другому лучше решить?
     
  6. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    File->New->VCL Forms Application - C++ Builder
     
  7. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    [​IMG]

    не вижу такого(
     
  8. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    По-идее надо Application выбрать
     
    _________________________
  9. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    такой вот код заработал, но ничего не происходит форма остается пустой. Я не сильно понял саму программу, только разбираюсь, немогу понять куда оно выведет ответ респонсе, и оно же никак не связано с формой...
    Code:
    #include <vcl.h>
    #pragma hdrstop
    USEFORM("Unit2.cpp", Form1);
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
            try
            {
                     Application->Initialize();
                     Application->CreateForm(__classid(TForm1), &Form1);
                     Application->Run();
            }
            catch (Exception &exception)
            {
                     Application->ShowException(&exception);
            }
            catch (...)
            {
                     try
                     {
                             throw Exception("");
                     }
                     catch (Exception &exception)
                     {
                             Application->ShowException(&exception);
                     }
            }
            return 0;
    }
    #include <stdio.h>
    #include <winsock2.h> // õåäåð ñ îïèñàíèåì wsa ô-èé
    
    // äëÿ ms vc++6.0 è äð - ïîäêëþ÷àåì lib'ó ñ èìïîðòàìè wsa ô-èé
    #pragma comment(lib,"ws2_32.lib")
    
    int main(int argc, char* argv[])
    {
    char request[1024*5]; // áóôôåð ïîä çàïðîñ
    char response[1024]; // áóôôåð ïîä îòâåò
    sockaddr_in s_a;
    WSADATA wd; // ñòðóêòóðà WSADATA
    
    WSAStartup( MAKEWORD( 2, 2 ), &wd ); // èíèöèàëèçèðóåì wsa
    
    SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // ñîçäàåì ñîêåò
    if (s == INVALID_SOCKET) return 255; // åñëè îøèáêà - âûõîä
    
    s_a.sin_addr.s_addr = inet_addr( "188.40.76.205" ); // àéïè ñåðâåðà, â äàííîì ñëó÷àå - àíòè÷àò.ðó
    s_a.sin_port = htons( 80 ); // ïîðò ñåðâåðà
    s_a.sin_family = AF_INET;
    
    if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - íåâîçìîæíî ïîäêëþ÷èòñÿ ê ñåðåâåðó
    
    char url[] = "/"; // ñòðàíèöà
    char host[] = "antichat.ru"; // õîñò
    // ôîðìèðóåì çàïðîñ
    sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host );
    
    send( s, request, strlen( request ), 0 ); // ïîñëàòü çàïðîñ
    recv( s, response, 1023, 0 ); // ìàêñèìóì ïîëó÷èòü 1023 áàéòà
    
    printf( "%s\r\n", response ); // âûâåñòè îòâåò íà ýêðàí
    
    closesocket( s ); // çàêðûâàåì ñîêåò
    WSACleanup(); // äåèíèöèàëèçèðóåì wsa
    
    return 0;
    }
    
     
  10. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Никуда эта программа ничего не выведет =)
    Судя по этому коду, тебе стоит сначала попробовать написать прогу "Hello world".
    Создай консольное приложение без VCL и вставь этот код в Unit1.cpp
     
  11. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    Да, запустил, прислал хеадер. )))) Спасибо большое, только я же хочу билдер приложение... роскажите плиз как сделать в билдере а не в консоле
     
  12. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    miniden GUI для ламеров :cool: xD
     
    _________________________
  13. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    просто программа для себя, хочу чтоб быстро выполнять определенную работу, и вот эта прога помогла бы, а разве можно ее выполнить в консоли? трей хот кей и все такое...
     
  14. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Создаешь проект (VCL Forms), кидаешь на форму TEdit, TMemo, TButton
    жмешь на Button1 2 раза, в обработчик клика пишешь:

    TIdHTTP *http = new TIdHTTP(0);
    Memo1->Lines->Add(http->Get(Edit1->Text));
    delete http;

    как-то так.
     
  15. Romik001

    Romik001 Member

    Joined:
    18 Jul 2009
    Messages:
    43
    Likes Received:
    8
    Reputations:
    10
    блин :) почти аналогичная трабла только еще смешней :) за всю ночь сидения в гугле и яше не смог обработать строку и выдрать то что нужно. на консольные функции компилятор ругается суко. нашел топик через гугл кстате ) эх нелегкое это дело самообучаться...

    ТС вот нашел пару ссылочек, может помогет чуток:

    Ссыль№1

    Ссыль№2 номер два это по моей теме. мне помогло :) мож тебе тоже пригодится
     
    #15 Romik001, 16 Jul 2010
    Last edited: 17 Jul 2010
  16. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Сори.Ну блин "WinMain" в VCL меня просто оборвало :D
     
  17. Igor2010

    Igor2010 New Member

    Joined:
    9 Apr 2010
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    недавно нашел на ccoder.pastebin.com
    http://ccoder.pastebin.com/1Z4UQhDu
    протестировал программа ищет, теги вынимает текст между началом и концом выводит в файл

    но у нее есть недочеты
    если не находит в одной строке совпадения начала и конца, то это не выводится,
    не находит и в нижнем регистре-строгая формализация