Anfrage an Suchmaschine senden

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute,
ich möchte einen SEOAnalyser mit Java basteln.
Das heißt ich sende mit einem bestimmten Keyword eine Suchanfrage an eine Suchmaschine und verarbeite dann die Ergebnisse.

Das Problem ist das Senden der Suchanfrage:

Code:
URL url = new URL("http://de.search.yahoo.com/search?p=wunsch&fr=yfp-t-501&ei=UTF-8&meta=vl%3D"); 	
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

Wenn ich das so ^^ mache, dann bekomme ich als Antwort stets ein Dokument mit einer ISO-8859-1 kodierung. Das kann ich nicht weiterverarbeiten. (Hab schon alles mögliche probiert, doch irgendwie damit zu arbeiten - seit 2 Tagen schon: das Resultat, es geht nicht...)

Wenn ich die Suchanfrage über einen HTTP Request löse, also so:
Code:
    	URL url = new URL("http://de.search.yahoo.com:80/");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
        wr.write("GET /search?p=wunsch&ei=UTF-8&fr=yfp-t-501&x=wrt&meta=vl%3D HTTP/1.0\r\n");
        wr.write("Host: de.search.yahoo.com\r\n");
        wr.write("Accept: text/html, text/plain, text/css, text/sgml, */*;q=0.01\r\n");
        wr.write("Accept-Encoding: gzip\r\n");
        wr.write("Accept-Language: en\r\n");
        wr.write("User-Agent: Lynx/2.8.6rel.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.6.2\r\n");
        wr.write("\r\n");
        wr.flush();
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Dann bekomme ich ein Dokument, das immer die Startseite der Suchmaschine ist und nicht die Ergebnisseite.

Wie kann ich sonst so eine Suchanfrage mit Java realisieren? Bzw. warum antwortet die Suchmaschine mit einem ISO-8859-1 Dokument? Kann man da irgendwas drehen, dass das Dokument mit UTF-8 empfangen wird?

Bin für jegliche Hilfe sehr dankbar - sitz da schon seit 2 Tagen dran und langsam bin ich am verzweifeln.

Gruß Beni
 

NTB

Bekanntes Mitglied
Ich kann Dir jetzt hier nicht konkret helfen. Aber es gibt für alle größeren Suchmaschinen Webservice APIs. Hört sich so an, als wenn das eh die bessere Wahl wäre.
 
G

Guest

Gast
Mit den APIs habe ich mich ausgiebig beschäftigt. Ich würde die auch liebend gern verwenden, wenn sie nur ansatzweise dieselben Suchergebnissen zurückgeben würden, wie die "Original-Suche" (Web Eingabeformular)...

Sonst jemand ne Idee, wie man das machen könnte? Ich find im Internet nicht wirklich was hilfreiches...
 
T

tuxedo

Gast
Also das hier

Code:
// Create a URL for the desired page
	        URL url = new URL("http://de.search.yahoo.com/search?p=wunsch&fr=yfp-t-501&ei=UTF-8&meta=vl%3D");
	    
	        // Read all the text returned by the server
	        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
	        String str = in.readLine();
	        while (str!=null) {
	        	System.out.println(str);
	        	str=in.readLine();
	        }
	        in.close();

Liefert mir das Suchergebnis ... Nur bei google scheint das nicht zu gehen. Wenn ich als url sowas angebe: http://www.google.de/search?hl=de&q=wunsch&btnG=Suche&meta=

Dann krieg ich gar nix zurück.

- Alex
 
G

Guest

Gast
Arbeiten die Suchmaschienen nicht mit sessionIDs, um so etwas zu verhindern ??

Hmm, dann müsste aber beim ersten mal bereits eine sessionID mitübergeben werden in der URL... und das ist nicht der Fall. Yahoo verwendet erst beim weiteren Suchen eine sessionID...

@Alex: Jupp, das Problem bei Google ist mir auch schon aufgefallen: ERROR: Forbidden kommt zurück

Deinen Quellcode hab ich mir angeguckt. Ich krieg da auch die Seite zurück.
Aber jetzt mach mal folgendes: Öffne einen Editor (z.B. notepad) und füge das Ergebnis mit Copy&Paste ein. Du wirst sehen, dass die Hälfte fehlt, weil nach "<div class=yschabstr>Wunschenken " im Quelltext ein Bindestrich kommt. Dieser ist in ISO-8859-1 nicht kodiert. <- DAS ist das Problem!

Erst wenn ich den gesamten Text über Copy&Paste kopieren kann, dann wird auch mein Parser funktionieren...
 
T

tuxedo

Gast
Das DOkument ist doch mit ISO-8859-1 kodiert, steht zumindest so am Anfang der Seite im Meta-Tag....

Also sollte doch auch das Bindestrichgedöns in ISO-8859-1 verfügbar sein. Weil wie sonst sollte ein Browser die Seite anzeigen wenn er sieht: aha, ist mit ISO-8859-1 kodiert, also lese ich mit ISO-8859-1, aber das Bindestrich-Dingens kenn ich mit ISO-8859-1 jetzt irgendwie nicht ?!

Verstehst du was ich meine?

- Alex
 
T

tuxedo

Gast
Ach ja, ich hab mal zwischendrin das hier gemacht:

Code:
InputStreamReader isr = new InputStreamReader(url.openStream());
	        BufferedReader in = new BufferedReader(isr);
	        System.out.println(isr.getEncoding());

Dabei rausgekommen ist cp1252 ...

Und noch was: Der Bindestrich bei dem das ganze vorher abbricht: Der kommt vorher auch schon vor, und da kommt zu keinen problemem?! Oder was ist an dem Bindestrich jetzt anders?
Kann mir nicht vorstellen dass "-" in ISO... nicht drin ist

Und zur Not, wenn alle Stricke reißen, kannst du eine Socket-Verbindung aufbauen und das bisschen GET-Anfrage auf unterster Ebene zum Server schicken. Das Ergebnis ist dann ein Stream von dem du byte(paket)weise lesen kannst. Unabhängig von irgendwelchen Kodierungen.

- Alex
 
G

Guest

Gast
Danke für deine Antworten.
Das DOkument ist doch mit ISO-8859-1 kodiert, steht zumindest so am Anfang der Seite im Meta-Tag....
jupp

Also sollte doch auch das Bindestrichgedöns in ISO-8859-1 verfügbar sein.
Nein, ein Bindestrich oder auch das Euro Zeichen ist in ISO-8859-1 nicht enthalten
(Nicht das Minuszeichen mit dem Bindestrich verwechseln!) http://de.wikipedia.org/wiki/ISO_8859-1

Weil wie sonst sollte ein Browser die Seite anzeigen wenn er sieht: aha, ist mit ISO-8859-1 kodiert, also lese ich mit ISO-8859-1, aber das Bindestrich-Dingens kenn ich mit ISO-8859-1 jetzt irgendwie nicht ?!
Das interessante ist ja, dass wenn ich die URL im Browser eingebe, Yahoo mit einem UTF-8 Dokument antwortet (steht im Header) Wobei die Browser meist selbst nachgucken, welche Kodierung die Beste ist und sich nicht immer auf das HTML Tag verlassen - am Rande.


Und zur Not, wenn alle Stricke reißen, kannst du eine Socket-Verbindung aufbauen und das bisschen GET-Anfrage auf unterster Ebene zum Server schicken. Das Ergebnis ist dann ein Stream von dem du byte(paket)weise lesen kannst. Unabhängig von irgendwelchen Kodierungen.

Das hab ich ja schon versucht. Aber wenn ich das so mache, dann bekomme ich jedesmal die Startseite zurück und nicht die Ergebnissseite - wie ich das ja schon im Ausgangsposting geschrieben habe.
 
G

Guest

Gast
Jetzt gehts:
Mithilfe des HTTPClient von Apache kann man einen vernünftigen HTTP Get an die Suchmaschine schicken und die Ergebnisse werden korrekt kodiert zurückgesendet.
 

Dante

Bekanntes Mitglied
hi, das problem bei deinem obigen code (ganz oben) ist folgendes:

wenn du die Klasse url isnatnzierst und verbindest, generiert die intern ein request, du nimmst dann den outputstream und schickst ein selbstgebautes zweites request. Das kann funktionieren (stichwort connection: keepalive) muss es aber nicht.

Auf jedenfall steht im Inputstream als erstes die ANtwort auf die Anfrage der UrlConnection, welche ja auf http://de.search.yahoo.com:80/ ginbg und daher die Startseite zurückliefert

Wenn du Anfragen selber bauen willst, nimm also besser nen echten Socket, der wurschtelt nirgendwo drin rum :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T HTTP Rest Anfrage mit JettyServer->415 "Unsupported Media Type" Response Netzwerkprogrammierung 0
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
P Mit Java Javascript-Anfrage versenden Netzwerkprogrammierung 4
P Java DHCP Anfrage Netzwerkprogrammierung 18
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
A serversocket soll anfrage vom handy entgegennehmen Netzwerkprogrammierung 4
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
M Socket Senden an alle verbundenen Clients Netzwerkprogrammierung 3
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
E Socket Befehl senden und antowrt bekommen ! Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
L Socket Nachrichten senden Netzwerkprogrammierung 3
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
M Socket Bilder senden Netzwerkprogrammierung 1
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
W Socket Byte Array senden Netzwerkprogrammierung 2
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
M MultiClient Server - Senden an alle Clients Netzwerkprogrammierung 8
X UDP - Zu großes Paket senden Netzwerkprogrammierung 1
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
M Teilnehmerliste vom Server auch an alle Clients senden Netzwerkprogrammierung 0
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
I Kleine Dateien senden Netzwerkprogrammierung 3
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
S Server-Client: Image senden Netzwerkprogrammierung 2
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
K Socket Senden und abspeichern Netzwerkprogrammierung 34
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
D Strings per Schleife zum Client senden Netzwerkprogrammierung 4
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Verschiedene Datentypen senden Netzwerkprogrammierung 4
M Befehle an externes Java-Programm senden Netzwerkprogrammierung 8
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
Weltall 7 HTTP Dateien an PHP-Skript senden Netzwerkprogrammierung 11
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
N Senden eines Arrays Netzwerkprogrammierung 6
F Char über Netzwerk senden Netzwerkprogrammierung 6
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
J Befehle an Server senden Netzwerkprogrammierung 5
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
Kr0e Ggf. Performanceproblem durch Senden von vielen kleinen Buffern Netzwerkprogrammierung 17
S Socket OutputStreams senden zu oft Netzwerkprogrammierung 6
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
KeNnY_tHe_OwNeR Empfangen geht, Senden nicht ?! Netzwerkprogrammierung 18
B Befehle an Gameserver senden bzw. empfangen Netzwerkprogrammierung 2
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
T HttpClient - Senden via Post Netzwerkprogrammierung 12
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
M Dateien über TCP/IP senden Netzwerkprogrammierung 18
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
G Information an Server senden? Netzwerkprogrammierung 4
D PDF und integer senden Netzwerkprogrammierung 6
M BufferedImage an PHP-Script senden Netzwerkprogrammierung 4
J Problem beim Senden von File Netzwerkprogrammierung 4
S String[] über Socket senden Netzwerkprogrammierung 3
G unbekannte Zeichen beim senden und lesen Netzwerkprogrammierung 2
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
T Image aus Applet an PHP Seite senden? Netzwerkprogrammierung 3
D BufferedImage über das Netzwerk senden Netzwerkprogrammierung 2
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
A Broadcast - senden eines Packetes an alle rechner im netz Netzwerkprogrammierung 15
R Bytes als Rohdaten über Socket senden Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
W Hexadezimal über RS232 senden Netzwerkprogrammierung 9
L webformular automatisch erstellen, senden und auswerten . Netzwerkprogrammierung 2
M TCP Socket und Server int senden und empfangen Netzwerkprogrammierung 6
M datagramSocket senden u. empangen? Netzwerkprogrammierung 2
V Java /Matrizen senden über TCP/IP / double Netzwerkprogrammierung 2
W Socket Client-Server Verbindung. Wie Strings senden? Netzwerkprogrammierung 6
M HTTP Requests verarbeiten und Response senden mit Java Netzwerkprogrammierung 14
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
K RMI und kontinuirliches senden von Datenpacketen Netzwerkprogrammierung 2
N Messwerte über TCP senden Netzwerkprogrammierung 3
F Datei senden und empfangen Netzwerkprogrammierung 4
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
N Hexcode an ein Programm senden. Netzwerkprogrammierung 4
I Dateien schnell/synchron senden Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben