14Aug

Lett analysere / søke en nettside søkesøkestrenger fra Apache stokker med php awk og sed linux kommandolinje -verktøy

6 deler: Bruk awk og sed å analysere apache loggfiler for bruker skrev søk Kjente problemer Versjon 2: Mindre kommandolinje forbehandling og mer php behandling ToDo Tips triks & amp;Advarsler Kommentarer

Dette HowTo vil vise deg hvordan du enkelt på Linux kommandolinjen analysere apache loggfiler for å få søkestrengen spørring data som brukerne skriver for å finne din nettside i en søkemotor.Jeg har tatt en php søk GUI samt for enkel bruk.

Var dette nyttig?Ja |Nei |Jeg trenger hjelp
Innhold
  • en Bruk awk og sed å analysere apache loggfiler for brukeren skrev søkene
  • 2 kjente problemer
  • 3 versjon 2: Mindre kommandolinje forbehandling og mer php behandling
  • 4 ToDo
  • 5 Tips triks & amp;Advarsler
  • 6 Kommentarer
Ad

Bruk awk og sed å analysere apache loggfiler for brukeren skrev søkene

Her er rå kode for å få jobben gjort.Merk at $ TITLE2 skal erstatte av hva du leter etter, men mellomrom er erstattet med "\ +".

For eksempel: "Hvordan finne en stor lollypop" ville være "Hvordan \ + til \ + finne \ + a \ + stor \ + lollypop"

Dette er fordi jeg har tenkt å ringe fra en php funksjon, hvor jeg vilbefolke $ TITLE2 som du vil se senere.Jeg kunne ha satt egrep

senere, men da vil du ikke ha mulighet til å søke både sidetittel og spørringer.Min opprinnelige versjonen bare søkte spørsmål, men jeg ville ha en funksjon jeg lett kunne kalle for en gitt side og se alle de spørsmål som brukere har skrevet i løpet av de siste ukene.

katt /var/log/virtualmin/VisiHow.com_access_log |#Get Data fra tilgangsloggen egrep "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + egrep -I "$ TITLE2" | #search for $ TITLE2 awk '{skrive $ 11} | #extract bare søkedata sed' s / p = / q = / ig '| #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle data som starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20/ / g; '|#reformat til lesbar format cut -d "& amp;"-f 1 |#strip av andre parametere awk '{print $ 0 "
"} #add
kobling pauser fordi vi planlegger å sende signaler til en nettside

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

== La oss lage et PHP

HTML GUI wrapper for denne bedriften ==

For å gjøre dette enkelt bruk vi ønsker å få tilgang til brukerspørringsdata fra en nettside søkeskjemaet.

queries.php

& lt; title & gt; Brukerspørringer & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; form name = "sform" method = "get" & gt;Søk Tittel: & lt; innspill size = "80" value = "& lt; php echo $ _GET [ 'tittel']; & gt;?"name = "title" type = "text" & gt;& Lt; inngangsverdien = "Søk" type = "submit" & gt;TIPS: Du kan bruke en delvis tittel eller regex som & lt; / skjema & gt; "Samsung * skade."

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

$ title = $ _GET [ 'tittel'];$ Title = preg_replace( "/ hvordan / i", "", $ tittel);$ TITLE2 = str_replace( "", "\ +", $ tittel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

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

egrep -i "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + egrep -i "$ TITLE2" | #search for TITLE2 awk '{skrive $ 11} | #extract bare søkedata sed' s / p = / q = / ig '| #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle data som starter med q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat til lesbar format cut -d "& amp;"-f 1 |#strip av andre parametere awk '{print $ 0 "
"} #add
kobling pauser fordi vi planlegger å sende signaler til en nettside

EOF;

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

hvis "{

print Searching for" $ title "..."( $ title = "!)";print "værende uke. ..
";print `cat /var/log/virtualmin/visihow.com_access_log |#Get Data fra tilgangsloggen $ bigcmd `;// Vi støtter p = også fordi yahoo bruker det. .. merkelig andebryst lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i UKE( er) siden
";skrive `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Data fra tilgangsloggen $ bigcmd `;}

} & gt;

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

& lt; / EOF

kjente problemer

Den grep er å plukke opp poster med henvisninger data slik at den er på vei tilbake uønskede poster.For eksempel hvis noen søker på "iPhone" og en bruker var på en iPhone side deretter klikket for å gå til en Samsung side, plukker denne koden opp iPhone fra referent og dermed omfatter at data som det ikke burde.Jeg jobber med versjon 2, som gjør mye mer, og vil fikse denne feilen ved å flytte mye av kommandolinjen preprosessering i php.Koden vil være mer stumpe, men vil gi langt mer nyttige og nøyaktige data.

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

Versjon 2: Mindre kommandolinje forbehandling og mer php behandling

Denne versjonen har følgende fordeler / ulemper:

  • Mindre kommandolinje forbehandling betyr lengre kode
  • mer php betyr mer kontroll og har
  • Ignorerer flere dupliserte forespørsler fra samme ip
  • teller flere søk i stedet for å føre dem flere ganger
  • Vis trending informasjon ved å vise ukentlige total
  • produksjonen eri rull divs for enkel visning av populære sider
  • Ordnet etter spørre lengder utgjorde, hvorav ca. betyr mer populære sidene viser første
  • litt rask og skitne javascript & amp;css å gjøre divs auto utvide for detaljert visning

& lt; title & gt; Brukerspørringer & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; form name = "sform" method = "get" & gt;Søk Tittel: & lt; innspill size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'tittel']) & gt; 0){
echo $ _GET [ 'tittel'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "Name = "title" / & gt;& Lt; inngangsverdien = "Søk" type = "submit" & gt;
TIPS: Skriv inn * for å se alt.Du kan bruke en delvis tittel eller regex som "Samsung * skade." & Lt; / skjema & gt;

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

funksjon sortbylen( $ a, $ b){

retur strlen( $ b) -strlen( $ a);

}

$ title = $ _GET [ 'tittel'];$ Title = preg_replace( "/ hvordan / i", "", $ tittel);$ TITLE2 = str_replace( "", "\ +", $ tittel);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

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

egrep -i "(q | p) =" |#use Bare poster som sannsynligvis har søk sed 's /% 22 / "/ g, s /% 20 / + / g, s / _ / + / g;' | #Do noen formateringsendringer og viktigst endre alle områdereller understreker til + awk '{print $ 1 "" $ 7 "" $ 11} | egrep -i "$ TITLE2" #search for TITLE2

EOF;

Var dette nyttig Ja | Nei | jeg trenger hjelp
?

if( $ title = ""){

print "Searching for" $ title "..."; 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 = eksplodere( "\ n", $ searchlogdata); foreach( $ searchlogarray som $ sdata){ $ logparts = eksplodere( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?»( \ & amp; |? $) / ", $ logparts [2], fyrstikker $);$ Ss = urldecode( $ kampene [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))){ // holde ut url fra nettstedsøkif( ($ ip = $ leppe) ||( $ ss = $ LSS)!){ $ leppe = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata som $ key = & gt; $ verdi){ $ Sarr = eksplodere( "|", $ verdi);foreach( $ Sarr som s $){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 som $ key2 = & gt; $ VAL2){ $ urldata [$ key] [$ i] = "$ VAL2: $ key2
";.$ STOT [$ key] [$ i] + = $ VAL2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata som $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata som $ uke){ print "
" $ wk ++ "WEEK( er) siden: Totale søk =" $ 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 grå, overløp: bla '& gt; $ uke ";}}

} & gt;

Var dette nyttig?Ja |Nei |Jeg trenger hjelp

& lt; / EOF

ToDo

Sorter etter søket lengde som en sekundær form, med lengre søk først

Det er det.Jeg vil gjerne høre dine erfaringer med denne koden eller forslag til forbedringer.

Tips triks & amp;Advarsler

  • Merk: Jeg støtter p = samt og standard q = fordi Yahoo være merkelig andebryst er det bruker p =
  • Versjon 2 php er mer kompleks, og jeg ble koding fort så noen av variablenenavn ble valgt dårlig.vennligst ikke klage som sin gratis kode.Men hvis du ønsker å fikse den opp og dokumentere den og legge den inn i wikien som versjon 3 som ville være fantastisk:) betale den frem!
  • Hvis du har problemer med noen av disse trinnene, stille et spørsmål om mer hjelp, eller legge i kommentarfeltet nedenfor.

Kommentarer

VisiHow velkommen alle kommentarer .Hvis du ikke ønsker å være anonym, kan du registrere deg eller logge inn. Det er gratis.




Daniel
Utvalgt Forfatter
69 Artikler i gang
2601 Artikkel Edits
24,290 poeng
Daniel er en kjennetegnet forfatter med VisiHow.Daniel har oppnådd nivået av "løytnant" med 24,290 poeng.Daniel har startet 69 artikler og gjort 2,601 artikkelen redigeringer.17,578 mennesker har lest Daniels artikkel bidrag.
Spør Daniel
Daniel : Hei, mitt navn er Daniel.
Daniel : Kan jeg hjelpe deg med ditt problem om "Enkelt analysere / søke på et nettsted søk søkestrenger fra Apache stokker med php awk og sed linux kommandolinje-verktøy"?
Godta