14Aug

Leicht parsen / Suche nach einem Suchbegriff Strings der Web-Seite von Apache-Logs php awk und sed Linux- Kommandozeilen - Utilities

6 Parts: Verwenden awk und sed Apache-Log-Dateien für Benutzer eingegeben Suchanfragen Bekannte Probleme Version 2 zu analysieren: Weniger Befehlszeile Vorverarbeitung und mehr PHP-Verarbeitung ToDo Tipps Tricks & amp;Warnungen Kommentare

Dieses HowTo zeigen Ihnen, wie leicht an der Linux-Befehlszeile zu analysieren Ihre Apache-Log-Dateien zu suchen Zeichenfolge Abfragedaten erhalten die Benutzer geben Sie Ihre Webseite in einer Suchmaschine zu finden.Ich habe eine PHP-Suche GUI als auch für die einfache Nutzung enthalten.

War dies hilfreich?Ja |Nein |Ich brauche
Inhalt
  • 1 Verwenden awk und sed zu analysieren Apache-Log-Dateien für Benutzer eingegeben Suchanfragen
  • 2 Bekannte Probleme
  • 3 helfen Version 2: Weniger Befehlszeile Vorverarbeitung und mehr pHP-Verarbeitung
  • 4 ToDo
  • 5 Tipps Tricks & amp;Warnungen
  • 6 Kommentare
Ad

Verwenden awk und sed Apache-Log-Dateien für Benutzer eingegeben Suche analysieren abfragt

ist die roh-Code die Arbeit zu erledigen.Beachten Sie, dass $ title2 durch sein ersetzen sollten, was Sie suchen, aber Leerzeichen ersetzt werden mit "\ +".

Zum Beispiel: "Wie eine große Lollypop zu finden" wäre: "Wie \ + + zu \ finden \ + a \ + big \ + Lollypop"

Das ist, weil ich aus einer PHP-Funktion aufrufen möchten, wo ich willbesiedeln $ title2 wie Sie später sehen werden.Ich hätte die egrep

später setzen, aber dann werden Sie nicht die Möglichkeit haben, sowohl Seitentitel und Abfragen zu suchen.Meine ursprüngliche Version gesucht nur Anfragen, aber ich wollte eine Funktion, die ich einfach für eine bestimmte Seite aufrufen und sehen konnte, alle Abfragen, die Benutzer in den letzten paar Wochen eingegeben haben.

Katze /var/log/virtualmin/VisiHow.com_access_log |#GET Daten aus dem Zugriffsprotokoll egrep "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + egrep -I "$ title2" | #search für title2 awk $ '{print $ 11}' | #extract nur Suchdaten sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle Daten, beginnend mit q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat zu Menschen lesbaren Format cut -d "& amp;"-f 1 |#strip aus anderen Parametern awk '{$ 0 "
" print}' #add
Link bricht, weil wir für die Ausgabe auf einer Webseite

War diese Information hilfreich planen?Ja |Nein |Ich brauche

helfen == Lassen Sie uns dafür jetzt eine PHP

HTML GUI-Wrapper erstellen ==

Um diese leicht Nutzung wir die Benutzerabfrage Daten von einer Webseite ein Suchformular aufrufen möchten zu machen.

queries.php

& lt; title & gt; Benutzerabfragen & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; form name = "sform" method = "get" & gt;Suche Titel: & lt; Eingabe size = "80" value = "? & Lt; & gt;; php $ _GET [ 'title'] echo"name = "title" type = "text" & gt;& Lt; Eingabewert = "Suchen" type = "submit" & gt;TIPP: Sie können einen Teil des Titels verwenden oder sogar regex wie & lt; / form & gt; "Samsung * Schaden."

War dies hilfreich?Ja |Nein |Ich brauche

$ title = $ _GET [ 'title'] helfen;$ Title = preg_replace( "/, wie man / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + egrep -i "$ title2" | #search für title2 awk '{print $ 11}' | #extract nur Suchdaten sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle Daten, beginnend mit q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat zu Menschen lesbaren Format cut -d "& amp;"-f 1 |#strip aus anderen Parametern awk '{$ 0 "
" print}' #add
Link bricht, weil wir

EOF auf eine Webseite zur Ausgabe planen;

War dies hilfreich?Ja |Nein |Ich brauche

wenn "{

drucken Die Suche nach" $ Titel "..." helfen( $ title = "!)";print "Diese Woche. ..
";Druck `cat /var/log/virtualmin/visihow.com_access_log |#GET Daten aus dem Zugriffsprotokoll $ bigcmd `;// Wir unterstützen p = auch, weil Yahoo verwendet, dass. .. ungerade Ente lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i Woche( n) AGO
";drucken `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#GET Daten aus dem Zugriffsprotokoll $ bigcmd `;}}

& gt;

War dies hilfreich?Ja |Nein |Ich brauche

& lt helfen; / EOF

Bekannte Probleme

Die grep Aufnehmen wird Datensätze mit Referrer-Daten, so dass es unerwünschte Datensätze zurückkehrt.Zum Beispiel, wenn jemand für "iPhone" sucht und ein Benutzer war auf einem iPhone Seite dann zu einem Samsung-Seite zu gelangen geklickt haben, dieser Code das iPhone aus dem Referrer aufnimmt und enthält somit, dass die Daten, die es nicht sollte.Ich arbeite an der Version 2, das viel mehr tut und wird diesen Fehler beheben, indem ein großer Teil der Befehlszeile Vorverarbeitung in PHP zu bewegen.Der Code wird mehr stumpf, aber viel nützlicher und genaue Daten geben.

War dies hilfreich?Ja |Nein |Ich brauche

Version 2 helfen: Weniger Befehlszeile Vorverarbeitung und mehr PHP-Verarbeitung

Diese Version bietet folgende Vorteile / Nachteile:

  • Weniger Befehlszeile Vorverarbeitungseinrichtung mehr Code
  • mehr pHP bedeutet mehr Kontrolle und verfügt über
  • Ignoriert mehrere doppelte Anfragen von der gleichen IP
  • mehrere Suchen Zählt statt sie mehrmals Listing
  • anzeigen Informationen Trending durch Errechnung Anzeige
  • Ausgang istin scrollbaren div-Tags für die einfache Anzeige von populären Seiten
  • Reihenfolge Abfrage Längen betrugen, was in etwa bedeutet populärer Seiten zeigen
  • Eine erste kleine quick and dirty Javascript & amp;CSS machen das Auto divs für detaillierte

& lt Betrachtung erweitern; title & gt; Benutzerabfragen & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; form name = "sform" method = "get" & gt;Suche Titel:? & Lt; Eingabe size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
Echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; Eingabewert = "Suchen" type = "submit" & gt;
TIPP: Geben Sie *, um alles zu sehen.Sie können einen Teil des Titels verwenden oder sogar wie regex "Samsung * Schaden." & Lt; / form & gt;

War dies hilfreich?Ja |Nein |Ich brauche

Funktion sortbylen( $ a, $ b){

Rückkehr strlen( $ b) -strlen( $ a) helfen;

}

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/, wie man / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Nur Datensätze, die wahrscheinlich von Suchanfragen sed haben 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | einige Formatierungsänderungen #Do und vor allem alle Räume ändernoder unterstreicht auf + awk '{$ 1 "" $ 7 "" 11 $ drucken}' | egrep -i "$ title2" #search für title2

EOF;

War dies hilfreich Ja | Nein | ich brauche
helfen?

if( $ title = "!"){

print "Suche nach" $ Titel "..."; for( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ searchlogdata $ = `cat /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ searchlogdata $ =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = explode( "\ n", $ searchlogdata); foreach( $ searchlogarray wie $ sdata){ = $ logparts explode( "", $ sdata); ip $ = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", Streichhölzer $ logparts [2], $);$ Ss = urldecode( $ treffer [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // draußen bleiben URL aus der Standortsucheif( ($ ip = $ Lippe) ||( $ ss = $ LSS)!){ $ Lippe = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata wie $ key = & gt; $ value){ $ sarr = explode( "|", $ value);foreach( $ sarr als $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 wie $ key2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ key2
";.$ Stot [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata wie $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata wie $ Woche){ print "
" $ wk ++ "WOCHE( S) AGO: Gesamt Suchen =" $ stot [url $] [$ wk-1] "
";.print "& lt; div Onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style =" width: 800px; height: 100px; border: 1px solid gray; Überlauf: blättern '& gt; $ Woche ";}}}

& gt;

War dies hilfreich?Ja |Nein |Ich brauche

& lt helfen; / EOF

ToDo

Sortieren nach Abfragelänge als sekundärer Art, mit mehr Anfragen ersten

Das ist es.Ich würde gerne Ihre Erfahrungen mit diesem Code oder Verbesserungsvorschläge zu hören.

Tipps Tricks & amp;Warnungen

  • Hinweis: Ich unterstütze p = auch und die Standard-q = weil Yahoo ist die ungerade Ente ist es verwendet p =
  • Version 2 php komplexer ist und ich war Codierung schnell, so einige der VariablenNamen waren schlecht gewählt.bitte beschweren Sie nicht als seinen freien Code.Aber wenn Sie wollen, dass es in Ordnung zu bringen und zu dokumentieren, und fügen Sie sie in das Wiki als Version 3 das wäre fantastisch nach vorne:) BEZAHLEN!
  • Wenn Sie Probleme mit einem dieser Schritte haben, eine Frage stellen, um weitere Hilfe, oder per Post in den Kommentaren Abschnitt weiter unten.

Kommentare

VisiHow begrüßt alle Kommentare .Wenn Sie nicht anonym sein wollen, registrieren oder einloggen. Es ist kostenlos.




Daniel
Hervorgehoben Autor
69 Artikel Gestartet
2601 Artikel Edits
24.290 Punkte
Daniel ist ein gefragter Autor mit VisiHow.Daniel hat das Niveau der "Lieutenant" mit 24.290 Punkten erreicht.Daniel hat 69 Artikel gestartet und machte 2601 Artikel Bearbeitungen.17.578 Menschen haben Daniels Artikel Beiträge lesen.
Stellen Sie Daniel
Daniel : Hallo, mein Name ist Daniel.
Daniel : Kann ich Ihnen helfen, mit Ihrem Problem über "leicht analysieren / Suche einer Webseite suchen Abfrage-Strings von Apache-Logs php awk und sed Linux-Kommandozeilen-Utilities"?
Accept