Announcement

Collapse
No announcement yet.

Seitequelltext einlesen und durchsuchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Seitequelltext einlesen und durchsuchen

    Guten Tag,

    ich programmiere momentan an einem Projekt, bei dem ich versuche wie folgt den Seitenquelltext einzulesen und zu filtern, bzw. zu überprüfen ob ein bestimmter Wert vorkommt und verschiedene Werte zwischen einigen Quelltextzeilen auszulesen.

    Code:
    	HINTERNET hInternet, hOpenUrl;
        
    	if ((hInternet = InternetOpen(L"Dax", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)) != NULL) {
    		if ((hOpenUrl = InternetOpenUrl(hInternet, L"http://www.boerse.de/", NULL, 0, 0 ,0)) != NULL) {
    			char    *buffer = new char[10000];
    			DWORD    bytesRead;
    
    			if (InternetReadFile(hOpenUrl, buffer, 10000, &bytesRead) == TRUE) {
    
    				buffer[bytesRead] = 0;
    				string sbuffer = buffer;
    				string search = "Dax";
    
    				cout << sbuffer << endl;
    				cout << search << endl;
    
    				getchar();
    
    				if (sbuffer. find(search) != string::npos)
    				{
    					cout << "Dax found." << sbuffer.find(search) << endl;
    					getchar();
    				}
    				else
    				{
    					cout << "Nothing found." << endl;
    					getchar();
    				}
    				InternetCloseHandle(hOpenUrl);
    			}
    		}
    		InternetCloseHandle(hInternet);
    	}
    Mein erstes Problem es wird nur ein sehr geringer Teil der Webseite eingelesen, was die Testausgabe zeigt.

    Das zweite Problem liegt nun darin, dass ich durch das Durchsuchen des Stings per .find() zwar überprüfen kann ob etwas vorhanden ist oder nicht,
    allerdings ist es mir nicht möglich den Wert des Dax der:

    HTML Code:
     <div class="quotes"><table class="table" cellspacing="0"><tr><td><a href="/indizes/DAX/DE0008469008">Dax</a></td><td align="right">6.435,50</td><td class="grey bRight" align="right">-0,14%</td><td><a href="/indizes/Dow-Jones-Industrial-Average/US2605661048">Dow Jones</a></td><td align="right">12.932,09</td><td class="red bRight" align="right">-0,58%</td><td><a href="/devisen/Euro-Dollar/EU0009652759">EUR-USD</a></td><td align="right">1,2970</td><td class="red" align="right">-0,30%</td></tr><tr><td><a href="/indizes/MDAX/DE0008467416">MDax</a></td><td align="right">10.365,00</td><td class="red bRight" align="right">-1,51%</td><td><a href="/indizes/Nasdaq-100/US6311011026">Nasdaq</a></td><td align="right">2.629,87</td><td class="red bRight" align="right">-0,35%</td><td><a href="/rohstoffe/WTI-Rohoel/XD0015948363">Roh&ouml;l (WTI)</a></td><td align="right">96,86</td><td class="red" align="right">-0,95%</td></tr><tr><td><a href="/indizes/TecDAX/DE0007203275">TecDax</a></td><td align="right">768,25</td><td class="red bRight" align="right">-1,18%</td><td><a href="/indizes/Euro-Stoxx-50/EU0009658145">EuroStoxx</a></td><td align="right">2.214,73</td><td class="red bRight" align="right">-0,95%</td><td><a href="/rohstoffe/Gold/XC0009655157">Gold</a></td><td align="right">1.587,10</td><td class="red" align="right">-1,13%</td></tr></table></div>
    hinter dem normal geschriebenen "Dax" steht <td align="right">6.435,50</td> auszulesen.
    Gibt es eine Möglichkeit diese beiden Fehler zu beheben und den sich ständig ändernden Wert auszulesen?

    Ich bedanke mich im Vorfeld für Ihre Hilfe und würde mich über Tipps oder Quelltextbeispiele freuen!

    Mit freundlichen Grüßen
    Infemo

  • #2
    Die Seite http://www.boerse.de/ hat vom Quelltext her ca. 86.853 Zeichen. Dein Buffer ist also zu klein.

    allerdings ist es mir nicht möglich den Wert des Dax der:
    Warum nicht? Und warum ist das ein Fehler? Wird nichts gefunden?

    Des Weiteren suchst du nur nach DAX. Das wird wohl in der Seite massenhaft vorkommen. Du musst also etwas finden, wo du garaniert die Stelle triffst die du willst. Dazu musst du den Quelltext analysieren.

    Sofern es

    "Dax</a></td><td align=\"right\">"

    ist, ist eben nach o.a. String zu suchen. Ab dieser gefundenen Stellen sind dann die nächsten 8 Zeichen deine gewünschte Zeichenkette.

    Dafür kann auch ein regulärer Ausdruck genutzt werden, sofern dein C++Builder das unterstützt oder du dir die Lib holst. Der Ausdruck wäre dann

    ">Dax</a></td><td align=\"right\">([\\d\\.,]+)</td>"
    Zuletzt editiert von Christian Marquardt; 09.05.2012, 16:33.
    Christian

    Comment

    Working...
    X