Skript
Transcription
Skript
1 Gleich zu Anfang • Was nicht behandelt wird: – Google Interna – Googles Page–Rank–Verfahren – Technik von Suchmaschinen im Allgemeinen und Google im Besonderen • Was wird behandelt? – Google aus Anwendersicht – Googles Syntax und das Google Web API 2 Einstellungen • Sprache der Suchoberfläche • bevorzugte Sprache(n) der Suchergebnisse (von A–Z) • Anzahl der Suchergebnisse 3 Anatomy der Suchergebnise A Erweiterte Suche 1 B Einstellungen C Suchtipps D Suchfeld E Google Such-Schaltfläche F Statistik-Balken G Überschrift der Seite H Text unter dem Titel I Beschreibung J Kategorien K URL des Resultats L Größe der Datei (nur html) M Zusätzliches Ergebnis N Im Cache O Ähnliche Seiten P Eingerücktes Ergebnis • Was fehlt: – News–Links erscheinen nur, wenn Suchbegriffe in aktuellen Nachrichten vorkommen. – Sponsored Links – Übersetzung: Falls das Ergebnis nicht in dt. Sprache ist, führt der Link [Diese Seite übersetzen] zu einer dt. Übersetzung (Wort–für–Wort–Übersetzung) 4 Boolsche Suche • Google untersützt die boolschen Operatoren AND, OR, NOT • Default ist AND • Operator OR kann mit | abgekürzt werden • Interessant ist NOT , geschrieben: − • Klammern sind erlaubt 2 5 Syntax • intitle nur zwischen ¡title¿-Tags suchen • inurl nur URLs absuchen • intext nur im Textkörper suchen • inanchor Text in Ankern finden • site Suche auf Site beschränken • link Links auf Suchwort • cache nur im Cache suchen • filetype finde bestimmte Dateitypen • related finde verwandte Seiten • info Infos über eine bestimmte URL finden • phonebook nur USA! • daterange s.u. 6 inurl vs. site • Unterschied zwischen URL und Site beachten • site–Search ist nur geeignet für die Suche nach bestimmten Domains oder Domainsuffixen (www.hu-berlin.de, ib.hu-berlin.de, de), nicht aber für Unterverzeichnisse unterhalb der Domain. • inurl löst das Problem der Suche nach Unterverzeichnissen und findet auch Treffer in www.ib.hu-berlin.de/∼fern • Beispiel: finde sämtliche Unterdomains von hu-berlin.de – site:hu-berlin.de inurl:’’*.hu-berlin’’ -inurl:’’www.hu-berlin’’ 3 7 Toolbars • Google Toolbar (Internet Explorer) http://toolbar.google.de • Mozilla Google Toolbar http://googlebar.mozdev.org • Quick Search Toolbar http://notesbydave.com • GAPIS (Google API Searching in an Application) http://www.searchenginelab.com/common/products/gapis 8 Limits • Bei normaler Suche – 10 Suchwörter – Suchwort site einmal • WebAPI – Bytelänge der Suchanfrage: 2048 Bytes – 10 Wörter für die Suche – Suchwort site einmal – Max. Anzahl der Resultate/Abfrage: 10 9 Wildcards / 10-Wort-Limit überwinden • häufige Wörter weglassen • +/− Operatoren einsetzen • Wildcards einsetzen: Google unterstützt nur fullword-wildcards, keine Trunkierung 10 Datumsuche mit daterange 10.1 Datumssuche • Syntax: daterange:start date-end date • Vorteile: – Suche kann auf aktuelle Inhalte beschränkt werden; 4 – aktuelle Ereignisse, die hohe Trefferraten erzielen, können vermieden werden; – Suchergebnisse über einen festgelegten Zeitraum können verglichen werden. • Probleme: – – – – Zeitraum der Indexierung, nicht der Erstellung wird verwendet; Seiten werden, sobald sie sich ändern, von neuem indiziert; Datumssuche wird offiziell nicht von Google unterstützt; Eingabeformat als julianischen Datum. 10.2 Julianisches Datum – Julian Date Julianisches Datum Die Anzahl der Tage, die seit dem 1. Januar 4713 v.Chr. vergangen sind. Ein julianisches Datum ist also einfach nur eine Zahl, die nicht weiter in Monate, Tage und Jahre unterteilt wird. Was hier schwer für Menschen ist, ist für Computer perfekt. Um nämlich ein Datum zu ändern, müssen sie nur eine bestimmte Anzahl von Tagen hinzuaddieren oder subtrahieren, ohne sich um bestimmte Formate, Monatsnamen usw. zu kümmern. Formel: k = (m − 14)/12 l = j + k + 4800 jd = t − 32075 + 1461 ∗ l/4 + 367 ∗ ((m − 2 − 12 ∗ k)/12) −3 ∗ ((l + 100)/100)/42452944 − 2453035 10.3 Anwendung von daterange • 4. Februar 2004 = 2453040 • 1. Februar 2004 = 2453037 • Suchbeispiele 1. Aktuelles Ereignis ausklammern und Anzahl der Ergebnisse vergleichen – Suche nach “Florian Gerster” im Zeitraum von 01. Nov. 2002 – 01. Feb. 2003 und “Florian Gerster” im Zeitraum von 01. Nov. 2003 – 01. Feb. 2004 – Erster Zeitraum "florian gerster" daterange:2452579-2452672 – Zweiter Zeitraum "florian gerster" daterange:2452944-2453035 – Im ersten Zeitraum erzielen wir ca. 250 und im zweiten Zeitraum fast 50.000 Ergebnisse. 5 11 Goolge auf der eingenen Seite 11.1 Einfachste Lösung • Vier Zeilen html reichen aus: <form method="get" action="http://www.google.de/search"> <input type="text" name="q" size=31 maxlength=255 value=""> <input type="submit" name="sa" value="Google Suche"> </form> 11.2 Etwas komfortabler <!-- Google Suchmaske --> <form method="get" action="http://www.google.de/search"> <input type="text" name="q" size=31 maxlength=255 value=""> <p /> Finde bestimmte Dateitypen: <select name="as_filetype"> <option value="pdf">PDF</option> <option value="ppt">Powerpoint</option> <option value="doc">MS Word</option> <option value="">Alle</option> </select> <p /> Suche auf Seiten der: <select name="as_sitesearch"> <option value="hu-berlin.de">HU Berlin</option> <option value="ib.hu-berlin.de">IB</option> <option value="aa">Egal</option> </select> <p /> <input type="submit" name="sa" value="Google Suche"> </form> <!-- Google Suchmaske --> 12 Web API 12.1 Worum geht es? • Ursprünglich waren automatisierte Abfragen bei Google verboten! Wers trotzdem tat, wurde komplett ausgesperrt (IP–Adresse, auch ganze Bereiche). 6 • Im Frühjahr 2002 änderte Google diese restriktive Politik und veröffentlichte das Google Web API. • API steht für Application Programming Interface, eine Schnittstelle, um mit eigenen Anwendungsprogrammen auf andere Anwendungen (Datenbanken, hier der Google Index) zugreifen zu können. • Zu finden ist das Web API unter http://www.google.com/apis 12.2 Wie funktioniert das Web API • Das Web API bietet eigenen Anwendungen eine definierte Schnittstelle zum Google Index. • Wer das Web API benutzen möchte, muß sich zuerst bei Google registrieren lassen. • Registrierte Nutzer/Innen erhalten einen Schlüssel, ohne den keine Abfragen möglich sind. • Dieser Schlüssel muß in jeder automatisierten Abfrage enthalten sein. • Eine Registrierung lohnt sich auch, wenn keine eigenen Programme entwickelt werden sollen, da auch Anwendungen von Drittanbietern, die auf den Google Index zugreifen, einen solchen Schlüssel verlangen. • Die Abfrage ist im Moment auf 1000 Ergebnisse täglich beschränkt. • Unbedingt die allgemeinen Geschäftsbedingungen durchlesen! 12.3 Web Services Description Language (WSDL) • XML–Format, mit dem Webservices beschrieben werden können. • Teil des Entwicklerpackets ist GoogleSearch.wsdl • GoogleSearch.wsdl beschreibt, welche Dienste über das Web API zur Verfügung stehen, die dazugehörigen Methodennamen und welche Argumente vom Programm übergeben werden können. • GoogleSearch.wsdl muß in jedem Programm, das Google abfragen möchte, enthalten sein. 7 12.3.1 Der Abfragecode im Programm • Kern jeder Google–Anwendung ist der Abfragecode. Ohne diesen liefert Google keine Ergebnisse. • Wichtige Teile des Abfragecodes: my $results = $google_search -> doGoogleSearch( key, query, start, maxResults, filter, restrict, safeSearch, lr, ie, oe ); • Erläuterungen: – start Offset: ab welchem Ergebnis soll begonnen werden (0 - 999); – maxResults wieviele Ergebnisse (1 - 10); – filter Ähnliche Ergebnisse herausfiltern (Inhalte, IP–Adressen) (true/false) – restrict Suche auf bestimmte Sprache (lang de, lang en) oder Thema (US Regierung, Linux, Mac, BSD) beschränken (unclesam, linux, mac, bsd); – safeSearch sollen Ergebnisse evtl. jungendgefährdende Inhalte enthalten (true/false). 13 Beispiele 13.1 Beispiel 1: Ein einfaches Beispiel #!/usr/bin/perl # usage: perl googly.pl <query> # Aus ’Google Hacks’ # my $google_key=’<ENTER YOUR KEY HERE>’; my $google_wsdl = "GoogleSearch.wsdl"; use SOAP::Lite; my $query = shift @ARGV or die "Usage: perl googly.pl <query>\n"; my $google_search = SOAP::Lite->service("file:$google_wsdl"); # query google my $results = $google_search -> doGoogleSearch( $google_key, $query, 0, 5, 8 "false", "", "false", "", "utf8", "uft8"); # no results? @{$results->{resultElements}} or exit; # loop throught the results foreach my $result (@{$results->{resultElements}}) { print join "\n", $result->{title} || "no title", $result->{URL}, $result->{snippet} || "no snippet", "\n"; } 13.2 Beispiel 2: Problem umgehen, daß nur 10 Ergebnisse geliefert werden #!/usr/bin/perl # looply.pl: 10 Ergebnisse Beschränkung bei Google mit # einer Schleife ueberwinden # # Usage: perl looply.pl <Abfrage> # Aus ’Google Hacks’ # use strict; use SOAP::Lite; my $googlekey = ’<ENTER YOUR KEY HERE>’; my $google_wsdl = "GoogleSearch.wsdl"; # wie oft soll die Schleife ausgefuehrt werden? my $loops = 3; my $offset = 0; my $query = shift @ARGV or die "Usage: perl looply <abfrage>\n"; my $google_search = SOAP::Lite->service("file:$google_wsdl"); # Anzahl der Ergebnisse mitverfolgen my $number = 0; for (my $offset=0; $offset<=($loops-1)*10; $offset+=10) { # Google abfragen my $results = $google_search -> doGoogleSearch( $googlekey, $query, $offset, 10, "false", 9 "", "false", "", "utf8", "utf8"); # Testen, ob ueberhaupt noch Ergebnisse vorliegen, sonst abbrechen last unless @{$results->{resultElements}}; # Ergebnisse ausgeben foreach my $result (@{$results->{’resultElements’}}) { # Was ausgegeben wird print join "\n", ++$number, $result->{title} || "no title", $result->{URL}, $result->{snippet} || "no snippet", "\n"; } } 13.3 Beispiel 3: Reihenfolge der Suchwörter kann relevant sein #!/usr/bin/perl # order_matters.cgi # Queries Google for every possible permutation of up to 4 query keywords, # returning result counts by permutation and top results across permutations. # order_matters.cgi is called as a CGI with form input # Aus ’Google Hacks’ # # Your Google API developer’s key my $google_key=’<ENTER YOUR KEY HERE>’; # Location of the GoogleSearch WSDL file my $google_wdsl = "GoogleSearch.wsdl"; use use use use strict; SOAP::Lite; CGI qw/:standard *table/; Algorithm::Permute; print header( ), start_html("Order Matters"), h1("Order Matters"), 10 start_form(-method=>’GET’), ’Query: ’, textfield(-name=>’query’), ’ ’, submit(-name=>’submit’, -value=>’Search’), br( ), ’<font size="-2" color="red"> Enter up to 4 query keywords or "quoted phrases" </font>’, end_form( ), p( ); if (param(’query’)) { # Glean keywords my @keywords = grep !/ˆ\s*$/, split /([+-]?".+?")|\s+/, param(’query’); scalar @keywords > 4 and print(’<font color="red">Only 4 query keywords or phrases allowed.</font>’), last; my $google_search = SOAP::Lite->service("file:$google_wdsl"); print start_table({-cellpadding=>’10’, -border=>’1’}), Tr([th({-colspan=>’2’}, [’Result Counts by Permutation’ ])]), Tr([th({-align=>’left’}, [’Query’, ’Count’])]); my $results = {}; # keep track of what we’ve seen across queries # Iterate over every possible permutation my $p = new Algorithm::Permute( \@keywords ); while (my $query = join(’ ’, $p->next)) { # Query Google my $r = $google_search -> doGoogleSearch( $google_key, $query, 0, 10, "false", "", "false", "", "latin1", "latin1" ); print Tr([td({-align=>’left’}, [$query, $r->{’estimatedTotalResultsCount’}] )]); @{$r->{’resultElements’}} or next; # Assign a rank 11 my $rank = 10; foreach (@{$r->{’resultElements’}}) { $results->{$_->{URL}} = { title => $_->{title}, snippet => $_->{snippet}, seen => ($results->{$_->{URL}}->{seen}) + $rank }; $rank--; } } print end_table( ), p( ), start_table({-cellpadding=>’10’, -border=>’1’}), Tr([th({-colspan=>’2’}, [’Top Results across Permutations’ ])]), Tr([th({-align=>’left’}, [’Score’, ’Result’])]); foreach ( sort { $results->{$b}->{seen} <=> $results->{$a}->{seen} } keys %$results ) { print Tr(td([ $results->{$_}->{seen}, b($results->{$_}->{title}||’no title’) . br( ) . a({href=>$_}, $_) . br( ) . i($results->{$_}->{snippet}||’no snippet’) ])); } print end_table( ), } print end_html( ); 14 Quellen 1. Tara Calishain, Rael Dornfest: Google Hacks ISBN 3-89721-362-1 2. http://www.google.com/apis 3. http://www.google.com/apis/reference.html 4. Pagerank Calculator: http://www.markhorrell.com/seo/pagerank.asp 5. GAPIS http://www.searchenginelab.com/common/products/gapis 12 6. Julianischer Kalender: http://en.wikipedia.org/wiki/Julian_date 7. Julianische Datum errechnen: http://aa.usno.navy.mil/data/docs/JulianDate.html 13