• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Anzahl der Google Treffer per PHP auslesen

LukeDukem

Neues Mitglied
Hallo zusammen.
Habe nun schon einiges per try&error ausprobiert, leider bisher ohne Erfolg, daher wende ich mich mal an euch.

Ich möchte für ein bestimmtes Wort per Script einen Teil der Google-Ergebnis-Seite auslesen, würde man danach googeln, und zwar lediglich die Anzahl der Treffer.
Bei Google steht dort in der betreffenden Zeile: Ungefähr 235.000 Ergebnisse (0,37 Sekunden)

Hat jemand eine Idee, die einfach umzusetzen wäre?
Die Google API scheint seit längerem nicht mehr zu funktionieren. Und möglicherweise will Google das ja auch gar nicht. Obwohl Googles Geschäftsmodell genau darauf basiert, andere Seiten zu grabben und auszulesen... aber das ist ein anderes Thema.

Ich würde mich freuen, wenn mir jemand hierbei helfen könnte.
Herzlichen Dank im Voraus :-)
 
Werbung:
Ich habe deshalb meine Antwort kurz vor deinem Post gelöscht gehabt.
 
Zuletzt bearbeitet:
Werbung:
Also hier eine (getestete) funktionierende Lösung:
Ich schätze warum der sehr triviale Versuch von vorher nicht funktioniert hat scheint wohl zu sein, dass Google den User Agent checkt um automated queries zu verhindern.
Aus diesem Grund muss in diesem Falle cURL verwendet werden (was man ohnehin tun sollte). Es reicht allerdings nicht aus, einfach den Content der Seite auszulesen.

Wir müssen ein wenig tricksen um quasi vorzutäuschen, dass wir ein normaler Browser sind. Wir müssen also ein paar zusätzliche Optionen für den cURL-Transfer setzen (curl_setopt).

Alles in allem komme ich auf diese Lösung:
PHP:
<?php

$search_string = "Test";

$url = "https://www.google.com/search?q=".$search_string;
$agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36';

$c = curl_init();

curl_setopt($c, CURLOPT_VERBOSE, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_URL,$url);
curl_setopt($c, CURLOPT_USERAGENT, $agent);

$result = curl_exec($c);

preg_match('/<div id="resultStats">.*?([0-9\.\,]+).*?<\/div>/', $result, $matches);

echo $matches[1];
Vorgefertigte Lösung... das schreit quasi nach copy & paste. Stell dir also die Frage, wie viel es dir bringen würde etwas zu kopieren, was dir keinen Lerneffekt bringt.
Mein Appell an dich: Beschäftige dich mit dem Code, frage bei Fragen nach und versuche ihn vollständig zu verstehen. Glaube mir, es bringt dich deutlich weiter als einfach blind alles zu übernehmen.
 
Zuletzt bearbeitet:
Ich folge zunächst dem Schrei... copy&paste... und es funktioniert grandios! :D
Vielen herzlichen Dank für deinen Einsatz!!
Ich lerne gerne dazu, werde deinem Rat folgen und versuchen, den Code nachzuvollziehen.

Wenn du dir das Ergebnis anschauen möchtest: https://wortgenerator.de
 
Hallo zusammen. Was 2019 noch funktionierte, funktioniert nun nicht mehr...

Eigentlich eine interessante Herausforderung...

Zur Erinnerung:

Ich möchte für ein bestimmtes Wort per Script einen Teil der Google-Ergebnis-Seite auslesen, als würde man danach googeln, und zwar lediglich die Anzahl der Treffer.
Bei Google steht dort in der betreffenden Zeile: Ungefähr 235.000 Ergebnisse (0,37 Sekunden)

Der von Aaron oben gepostete Code funktioniert nicht (mehr).
Hat jemand eine Idee, die einfach umzusetzen wäre?
 
Werbung:
Vielen Dank für den Hinweis. Ich habe das im Code angepasst in

id="result-stats" (anstatt "resultStats")

aber leider werden die "matches" immer noch nicht ausgegeben.

wenn man $result ausgibt, erhält man:

301 Moved
The document has moved here.


Da müsste also noch irgendwo ein Haken sein... Google wehrt sich... was kann man tun?
 
Werbung:
Vielen Dank für eure Hilfe! Ich habs jetzt hinbekommen.
War mein Fehler. Darf in der $url nicht "https://google.com" heißen, sondern "https://www.google.com".

Ja tk1234, hast Recht, muss man bisschen vorsichtig mit sein. Ist nur für ein kleines Tool gedacht.
 
Zurück
Oben