Seite 1 von 3

mittels http google Suchergebnis runterladen und parsen

Verfasst: 24.06.2009 00:42
von m0
Hi!

Ich würde gern ein Google Suchergebnis mittels der http-library runterladen und die html file dann parsen, jedoch kriege ich von google kein suchergebnis, weis jemand woran das liegen könnte?
Muss ich irgendwelche header dazu nehmen? So bekomme ich nur ne redirect meldung von google.

Code: Alles auswählen

InitNetwork()
ReceiveHTTPFile("http://www.google.de/search?hl=de&q=test&btnG=Google-Suche&meta=&aq=f&oq=","/Users/m0/Desktop/searchresult.htm")
OpenFile(0,"/Users/m0/Desktop/searchresult.txt")
Vielen Dank schonmal für die Hilfe
Grüße
m0

Verfasst: 24.06.2009 00:56
von KeyKon
Lass einfach den Sinnlosen quatsch am Link weg, ich hab auch schonmal Googlesuchen gemacht weil ich dieses Tolle Spiel aus Schlag den Raab nachprogrammiert hatte^^

Code: Alles auswählen

search$ = "test"
ReceiveHTTPFile("http://www.google.de/search?hl=de&q="+search$,"C:\test.html")

Verfasst: 24.06.2009 06:58
von X360 Andy
Dazu wäre Perfekt die Google API gemacht.
Da sie schneller ist und weniger Parsen muss bzw gar nicht da es ja eine XML ist.

Verfasst: 24.06.2009 11:34
von m0
Danke für die Antworten, aber mit der Kurzfassung bekomme ich auch keine search results zurück, leider. Mit der API hört sich gut an, aber ich habe nichts über die Verwendung der API gefunden vielleicht könntest du mir einenBeispielcode/Link oer sowas posten, wäre echt nett.

Grüße
m0

Verfasst: 24.06.2009 11:57
von Kiffi
m0 hat geschrieben:Danke für die Antworten, aber mit der Kurzfassung bekomme ich auch keine search results zurück, leider.
wenn Du searchresult.htm speicherst und searchresult.txt öffnen
willst (wieso eigentlich mit OpenFile()?), dann kann das nicht funktionieren.

Grüße ... Kiffi

Verfasst: 24.06.2009 12:56
von Little John
2m0:
Wenn PB-Befehle Werte zurückliefern, sollte ein Programm diese prüfen und bei Bed. entspr. reagieren.

Folgendes kleines Programm funktioniert im Prinzip:

Code: Alles auswählen

; PB 4.31

EnableExplicit

Procedure.i GetGoogleResults (search$)
   Protected file
   Protected line$, results$ = "searchresult.htm"

   If ReceiveHTTPFile("http://www.google.de/search?hl=de&q="+search$, results$) = 0
      Debug "Fehler beim Herunterladen der Suchergebnisse!"
      ProcedureReturn 0
   EndIf

   file = ReadFile(#PB_Any, results$)
   If file = 0
      Debug "Fehler beim Öffnen der Suchergebnisse!"
      ProcedureReturn 0
   EndIf

   While Eof(file) = 0
      line$ = ReadString(file)
      Debug line$
   Wend
   
   CloseFile(file)
   ProcedureReturn 1
EndProcedure


;-- Demo
Define search$ = "Paul+C%E9zanne"


If InitNetwork() = 0
   Debug "Fehler bei der Initialisierung!"
   End
EndIf

If GetGoogleResults(search$) = 1
   Debug "-----  OK  -----"
EndIf
Die heruntergeladene Datei enthält aber nicht die Suchergebnisse! Sie sieht so aus (ich habe nur ein paar Zeilenumbrüche eingefügt):
<!doctype html>
<head>
<title>Paul Cézanne - Google-Suche</title>
<script>window.google={kEI:"JwFCSo6dC83Z-QaO7bHECA",kEXPI:"17259",kCSIE:"17259",kHL:"de"};
window.google.sn="web";window.google.timers={load:{t:{start:(new Date).getTime()}}};try{window.google.pt=window.gtbExternal&&window.gtbExternal.pageT()||window.external&&window.external.pageT}catch(b){}
window.google.jsrt_kill=1;
</script>
<style>body{background:#fff;color:#000;margin:3px 8px}#gbar{height:22px;padding-left:0px}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}#gbi,#gbs{background:#fff;left:0;position:absolute;top:24px;visibility:hidden;z-index:1000}#gbi{border:1px solid;border-color:#c9d7f1 #36c #36c #a2bae7;z-index:1001}#guser{padding-bottom:7px !important;text-align:right}#gbar,#guser{font-size:13px;padding-top:1px !important}@media all{.gb1,.gb3{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}.gb2{display:block;padding:.2em .5em}a.gb1,a.gb2,a.gb3{color:#00c !important}.gb2,.gb3{text-decoration:none}a.gb2:hover{background:#36c;color:#fff !important}a.gb1,a.gb2,a.gb3,.link{color:#20c!important}.ts{border-collapse:collapse}.ts td{padding:0}.ti,.bl,form,#res h3{display:inline}.ti{display:inline-table}.fl:link,.gl a:link{color:#77c}a:link,.w,#prs a:visited,#prs a:active,.q:active,.q:visited{color:#20c}.mblink:visited,a:visited{color:#551a8b}a:active{color:red}.cur{color:#a90a08;font-weight:bold}.b{font-weight:bold}.j{width:42em;font-size:82%}.s{max-width:42em}.sl{font-size:82%}#gb{text-align:right;padding:1px 0 7px;margin:0}.hd{position:absolute;width:1px;height:1px;top:-1000em;overflow:hidden}.f,.m,.c h2,#mbEnd h2{color:#676767}.a,cite,.cite,.cite:link{color:green;font-style:normal}#mbEnd{float:right}h1,ol{margin:0;padding:0}li.g,body,html,.std,.c h2,#mbEnd h2,h1{font-size:small;font-family:arial,sans-serif}.c h2,#mbEnd h2,h1{font-weight:normal}#ssb,.clr{clear:both}#nav a,#nav a:visited,.blk a{color:#000}#nav a{display:block}#nav .b a,#nav .b a:visited{color:#20c}.ch{cursor:pointer}h3,.med{font-size:medium;font-weight:normal;padding:0;margin:0}.e{margin:.75em 0}.slk td{padding-left:40px;padding-top:5px;vertical-align:top}.slk div{padding-left:10px;text-indent:-10px}.fc{margin-top:.5em;padding-left:3em}#mbEnd cite{display:block;text-align:left}#mbEnd p{margin:-.5em 0 0 .5em;text-align:center}#bsf,#ssb,.blk{border-top:1px solid #6b90da;background:#f0f7f9}#bsf,#ssb{margin:11px 0}#bsf{border-bottom:1px solid #6b90da}#ssb div{float:left;padding:4px 0 0;padding-left:4px;padding-right:.5em}#prs a,#prs b{margin-right:.6em}#ssb p{text-align:right;white-space:nowrap;margin:.1em 0;padding:.2em}#ssb{margin-top:0;padding:.1em}#mbEnd{background:#fff;padding:0;border-left:10px solid #fff;border-spacing:0;white-space:nowrap}#res{padding-right:1em}.c{background:#fff8dd}.c li{padding:0 3px 0 5px;margin:0}.c .tam,.c .tal{padding-top:12px}#mbEnd li{margin:1em 0;padding:0}.xsm{font-size:x-small}.sm{margin:0 0 0 40px;padding:0}ol li{list-style:none}.sm li{margin:0}.gl,#bsf a,.nobr{white-space:nowrap}#mbEnd .med{white-space:normal}.sl,.r{display:inline;font-weight:normal;margin:0}.r{font-size:medium}h4.r{font-size:small}.g{margin:1em 0}em{font-weight:bold;font-style:normal}em,b{text-decoration:inherit}</style>
<script>google.y={};google.x=function(e,g){google.y[e.id]=[e,g];return false};window.gbar={qs:function(){},tg:function(e){var o={id:'gbar'};for(i in e)o=e;google.x(o,function(){gbar.tg(o)})}};</script>
</head>

<body id=gsr topmargin=3 marginheight=3>
<textarea id=csi style=display:none></textarea><div id=header><div id=gbar><nobr><b class=gb1>Web</b> <a href="http://images.google.de/images?hl=de&q= ... a=N&tab=wi" onclick=gbar.qs(this) class=gb1>Bilder</a> <a href="http://video.google.de/videosearch?hl=d ... a=N&tab=wv" onclick=gbar.qs(this) class=gb1>Video</a> <a href="http://maps.google.de/maps?hl=de&q=Paul ... a=N&tab=wl" onclick=gbar.qs(this) class=gb1>Maps</a> <a href="http://news.google.de/ne

Das ist noch nicht mal eine syntaktisch korrekte HTML-Datei, was man schon daran sieht dass die Tags </body> und </html> nicht vorhanden sind. Vermutlich fehlt das Ende der Datei, aber wieso?

Gruß, Little John

Verfasst: 24.06.2009 14:35
von m0
Also, das mit txt und html hab ich nur bei der kopierten Version falsch, außerdem schau ich mit die runtergeladene Datei eh im txtedit an was die rückgabewerte der Funktionen angeht spar ich mir Error Handling bei einem ersten test einfach gern, vor allem wenns wie hier der fall ja nicht am Codefehler liegt, sondern einfach an der Art wie Google mit den anfragen umgeht. weil wie little john erkannt hat kommt zwar eine Datei, aber ohne suchergebnisse und genau darin liegt auch mein Problem. der Code funktioniert ja an sich.

Was das Openfile angeht so hab ich s einfach zum testen gemacht, klar dass readfile eigentlich reichen würde, aber das Ergebnis is ja das selbe in dem fall (von der Geschwindigkeit, die bei readfile evtl besser sein könnte, abgesehen)

Danke für eure Mühe!

Verfasst: 24.06.2009 16:47
von KeyKon
Also bei mir liefert mein Code die Suchergebnisse :freak:

Verfasst: 24.06.2009 17:26
von Little John
m0 hat geschrieben:Also, das mit txt und html hab ich nur bei der kopierten Version falsch, außerdem schau ich mit die runtergeladene Datei eh im txtedit an was die rückgabewerte der Funktionen angeht spar ich mir Error Handling bei einem ersten test einfach gern, vor allem wenns wie hier der fall ja nicht am Codefehler liegt, sondern einfach an der Art wie Google mit den anfragen umgeht. weil wie little john erkannt hat kommt zwar eine Datei, aber ohne suchergebnisse und genau darin liegt auch mein Problem. der Code funktioniert ja an sich.
Das konnte aber niemand ahnen. Wenn Du's gleich so detailliert geschrieben hättest, hätte ich mir das ganze sparen können. :freak:
KeyKon hat geschrieben:Also bei mir liefert mein Code die Suchergebnisse :freak:
Und wie sieht Dein Code aus? ;-)

Ich überlege gerade ... Vielleicht hängt das Problem damit zusammen, dass die Datei mit den Suchergebnissen ja nicht statisch vorhanden ist, sondern erst dynamisch erzeugt wird. Vielleicht lädt ReceiveHTTPFile() sie herunter (bei m0 und bei mir), bevor sie überhaupt fertig ist?

Gruß, Little John

Verfasst: 24.06.2009 18:03
von KeyKon
Sry funzt doch nich^^ Mit Test funzt es schon aber nich mit Paul+C%E9zanne...
Ich vermute das der Fehler bei dem PB-Befehl liegt, evtl weil Google die Länge der Site nich richtig mitsendet...

Per API funzt es auf jeden Fall einwandfrei:

Code: Alles auswählen

URLDownloadToFile_(0,"http://www.google.de/search?hl=de&q=Paul+C%E9zanne","C:\test.html",0,0)
Ich würde sagen da muss der HTTP-Befehl noch überarbeitet werden, wär auch praktisch wenn man mit dem direkt in einen Speicherbereich downloaden könnte...