mittels http google Suchergebnis runterladen und parsen

Für allgemeine Fragen zur Programmierung mit PureBasic.
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

mittels http google Suchergebnis runterladen und parsen

Beitrag 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
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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")
(\/) (°,,,°) (\/)
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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.
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

Beitrag 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
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Little John

Beitrag 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
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

Beitrag 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!
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Also bei mir liefert mein Code die Suchergebnisse :freak:
(\/) (°,,,°) (\/)
Little John

Beitrag 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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Antworten