Text aus einer Website lesen
-
hallo zusammen
ich möchte aus irgendeiner website eine bestimmte textstelle auslesen und in einem C/C++ oder C# Programm verarbeiten.
Wie könnte ich das anstellen
Als Beispiel auf der C-plusplus seite
oben rechts steht das wort "startseite" nun möchte ich die nächsten 5 zeichen in mein programm einlesen, also sollte ich in meinem progg dann "Links" stehen habenmfg oggs
-
ach ja und ich möchte nicht aus dem quellcode sondern aus der geladenen seite lesen
-
Um den Quellcode einer Webseite zu lesen, musst du dich mit dem Server verbinden (Port 80) und einen HTTP-Request senden. Beispiel:
Du verbindest dich mit www.google.com auf Port 80(HTTP). Dann sendest du: "GET / HTTP/1.1[crlf]Host: www.google.com[crlf][crlf]". Dann sendet dir Google die Startseite.
Um das in C/C++ zu realisieren, verwendest du am besten Winsock. Ein sehr gutes Tutorial findest du auf http://www.c-worker.ch/tuts/wstut_op.php.
mfg, loose
-
loose schrieb:
Um den Quellcode einer Webseite zu lesen
Er will ja nicht aus dem Quellcode lesen ...
-
Er hat aber keine andere Wahl, den Quelltext einer Webseite zu emfangen, ist die einzige Möglichkeit (zumindest in C/C++; möglicherweise gibt es in anderen höheren Sprachen eine Objektorientierte Lösung). Die Mühe, daraus einen formatierten Text zu machen, mus er sich schon selbst machen...
-
Das mag sein; seine Frage war ja, ob es geht, ohne aus dem Quelltext zu lesen. Du hast ihm zwar erklärt, wie er den Quelltext erhält, aber ohne speziell zu sagen, dass es mit C/C++ nicht möglich ist, es anders zu realisieren, als den Quelltext auszulesen.
Ob esm it einer höheren Sprache möglich ist, weiß ich auch nicht ...
-
oggs_the_progger schrieb:
Als Beispiel auf der C-plusplus seite
oben rechts steht das wort "startseite"Hallo ? Rechts ist da, wo der Daumen links ist !
oggs_the_progger schrieb:
nun möchte ich die nächsten 5 zeichen in mein programm einlesen, also sollte ich in meinem progg dann "Links" stehen haben
Hallo ? Die nächsten 5 Zeichen sind: Modul
Nr.1: 'M', Nr.2: 'o', Nr.3: 'd', usw.long long double schrieb:
Ob esm it einer höheren Sprache möglich ist, weiß ich auch nicht ...
Nein, selbst dann nicht, wenn die Sprache 1798,67 Meter hoch ist.
Wie denn auch, die Seite liegt im Html-Format vor.
Wenn, dann ginge es mit einer Bibliothek, die dir die Seite runterlädt und entsprechend in die einzelnen Bestandteile zerlegt.
(Links, Text, Bilder, usw. )MfG MfG
-
MfG schrieb:
long long double schrieb:
Ob esm it einer höheren Sprache möglich ist, weiß ich auch nicht ...
Nein, selbst dann nicht, wenn die Sprache 1798,67 Meter hoch ist.
Was ein Scherz ...
MfG schrieb:
long long double schrieb:
Ob esm it einer höheren Sprache möglich ist, weiß ich auch nicht ...
Wenn, dann ginge es mit einer Bibliothek, die dir die Seite runterlädt und entsprechend in die einzelnen Bestandteile zerlegt.
(Links, Text, Bilder, usw. )Das ist die Frage.
-
IHTMLDocument2::get_links
Viel "Spass" damit (igitt)
MfG bäääääääääh
-
DOM, XPath, ga gibt's viele Möglichkeiten.
-
Hi,
Ich möchte auch eine Webiste einlesen jedoch den Source Code!
Ich habe das Tut von c-worker durch und es so gemacht wie beschrieben doch er bleibt beim empfangen stehen
Code:memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(80); addr.sin_addr.s_addr=inet_addr("google.de"); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { goto restart; } for(;;) { strcpy(buf,"GET / HTTP/1.1[crlf]Host: www.google.de[crlf][crlf]"); send(s,buf,strlen(buf),0); rc=recv(s,buf,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); break; } buf[rc]='\0'; printf("%s\n",buf); closesocket(s); WSACleanup(); }
Warum tut sich da nichts?
Also senden tut er nur beim empfangen bleibt er stehen!MFG ReduX
-
Dein Fehler liegt ganz einfach daran, dass du der Funktion inet_addr() "google.de" übergibst. Die Funktion erwartet aber eine IP-Adresse (in dem Fall 209.85.135.99).
Ansonsten muss du die Funktion gethostbyname() verwenden.
Hier mal ein Beispiel, bei dem Beide Möglichkeiten(Hostname/IP) funktionieren:#include <winsock2.h> #include <stdio.h> #define BSIZE 256 int main(int argc, char **argv) { long rc; SOCKET s; SOCKADDR_IN addr; char buf_in[BSIZE], buf_out[BSIZE]; WSADATA wsa; HOSTENT *hent; char *host="www.google.de"; memset(&addr, 0, sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(80); if(WSAStartup(MAKEWORD(2, 0), &wsa)) { printf("Winsock konnte nicht gestartet werden. Fehler: %d\n", WSAGetLastError()); return 1; } else printf("Winsock gestartet!\n"); if((s=socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET) { printf("Socket konnte nicht erstellt werden. Fehler: %d\n", WSAGetLastError()); return 1; } else printf("Socket erstellt!\n"); if((addr.sin_addr.s_addr=inet_addr(host))==INADDR_NONE) { if(!(hent=gethostbyname(host))) { printf("Host nicht gefunden. Fehler:", WSAGetLastError()); return 1; } strncpy((char*)&addr.sin_addr.s_addr, hent->h_addr, 4); if(addr.sin_addr.s_addr==INADDR_NONE) { printf("Host nicht gefunden. Fehler:", WSAGetLastError()); return 1; } } if((rc=connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)))==SOCKET_ERROR) { printf("Verbindung konnte nicht hergestellt werden. Fehler: %d\n", WSAGetLastError()); return 1; } else printf("Verbunden mit %s\n", host); sprintf(buf_out, "GET / HTTP/1.1\r\nHost:www.google.de\r\nConnection:close\r\n\r\n"); send(s, (char *)buf_out, strlen(buf_out), 0); while(rc=recv(s, buf_in, BSIZE, 0)) { buf_in[rc]=0; printf("%s", buf_in); } getchar(); closesocket(s); WSACleanup(); return 0; }
mfg, loose
-
Hi,
Danke für deine Antwort!
Es funktioniert so weit
Nur wie bekomme ich es hin den Quelltext von bestimmten files zu holen z.b. von test.htm.
Bei der Anfrage habe ich Probeweiße einfach den Datei namen hintendrann geschrieben
Doch dann meldet der Server Falsche anfrage!
Meine Frage deshalb wie lautet die Anfrage um gezielt dateien zu lesen?MFG ReduX
-
Wenn du beispielsweise, das Logo von Google herunterladen willst(http://www.google.de/intl/de_de/images/logo.gif), sendest du folgenden HTTP-Request:
GET /intl/de_de/images/logo.gif HTTP/1.1
Host:www.google.de
Connection:closeDann bekommst du in etwa folgende Antwort:
HTTP/1.1 200 OK
Content-Type: image/gif
Last-Modified: Wed, 07 Jun 2006 19:40:07 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Server: GWS/2.1
Content-Length: 9121
Date: Wed, 18 Jul 2007 14:25:40 GMTGIF89...(hier folgt die GIF-Graphik)
Bei Wikipedia(http://de.wikipedia.org/wiki/Http) findest du weitere Infos zum HTTP.
mfg, loose