14Aug

Fácilmente analizar / buscar cadenas de consulta de búsqueda de una página web desde los logs de Apache usando awk php y utilidades de línea de comandos de Linux sed

click fraud protection
6 Piezas: Use awk y sed para analizar los archivos de registro de Apache para tecleado por el usuario consultas de búsqueda problemas conocidos de la versión 2: Menos de preprocesamiento línea de comandos y más procesamiento php trucos consejos de Tareas & amp;Advertencias Comentarios

este Como le mostrará cómo fácilmente en la línea de comandos de Linux analizar los archivos de registro de Apache para obtener una cadena de búsqueda de datos de consulta que los usuarios escriben para encontrar su página web en un motor de búsqueda.He incluido una interfaz gráfica de usuario de búsqueda php, así como para el uso fácil.

Ha sido útil?Sí |No |Necesito ayuda
Contenido
  • 1 Uso awk y sed para analizar los archivos de registro de Apache para la búsqueda mecanografiado usuario consulta
  • 2 Problemas conocidos
  • 3 Versión 2: Menos de preprocesamiento línea de comandos y más procesamiento php
  • 4 trucos Tareas Tips
  • 5 & amp;Advertencias
  • 6 Comentarios
anuncio
instagram viewer

Uso awk y sed que analizar los archivos de registro de Apache para la búsqueda mecanografiado usuario consulta

Aquí está el código prima para hacer el trabajo.Tenga en cuenta que $ title2 se debe reemplazar por lo que está buscando, pero los espacios son reemplazados con "\ +".

Por ejemplo: "¿Cómo encontrar un gran caramelo con palo" sería "¿Cómo \ + a \ + encontrar \ + a \ + grande \ + caramelo con palo"

Esto se debe a que tengo la intención de llamar a partir de una función php, en el que sepoblar $ title2 como se verá más adelante.Podría haber puesto el

egrep más tarde, pero entonces no tendrá la opción de buscar tanto título de la página y consultas.Mi versión original acaba de consultas buscó, pero yo quería una función que fácilmente podría llamar a una página determinada y ver todas las consultas que los usuarios han escritos a través de las últimas semanas.

gato /var/log/virtualmin/VisiHow.com_access_log |#GET datos del registro de acceso egrep "(q | p) =" |#Utilice Sólo los registros que tienen probabilidades consultas de búsqueda sed '22 /' / G s /%; s /% 20 / + / g; s / _ / + / g; '| #No algunos cambios de formato y lo más importante cambiar todos los espacioso subraya a + egrep -i "$ title2" | #search por $ title2 awk '{print $ 11}' | #extract sólo los datos de búsqueda sed 's / p = / = q / ig' | #handle Yahoo p = awk -F '= q' '{print $ 2}' | #grab todos los datos que comienzan con q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s / 20%/ / g; '|#reformat a humano formato legible corte -d "& amp;"-f 1 |#strip de otros parámetros awk '{print $ 0 "
"}' #ADD
enlace se rompe porque estamos pensando en la salida a una página web

Ha sido útil?Sí |No |Necesito ayuda

== Vamos a crear una envoltura GUI PHP

HTML para esto ahora ==

Para hacer esto fácilmente el uso que queremos acceder a los datos de la consulta de usuario desde un formulario de búsqueda página web.

queries.php

& lt; title & gt; Consultas de usuarios & lt; / title & gt;& Lt; meta name = contenido de "robots" = "noindex" & gt;

& lt; form name = método de "sform" = "get" & gt;Buscar Título: & lt; = valor de entrada de tamaño "80" = "& lt;? Php echo $ _GET [ 'titulo']; & gt;?"name = "título" type = "text" & gt;& Lt; valor de entrada = "Buscar" type = "submit" & gt;SUGERENCIA: Puede utilizar un título parcial o incluso regex como & lt; / form & gt; "Samsung * daños."

Ha sido útil?Sí |No |Necesito ayuda

$ titulo = $ _GET [ 'titulo'];$ Title = preg_replace( "/ cómo / i", "", $ titulo);$ Title2 = str_replace( "", "\ +", $ titulo);$ Title2 = str_replace( "_", "\ +", $ title2);

$ bigcmd = & lt; & lt; & lt; EF

egrep -i "(q | p) =" |#Utilice Sólo los registros que tienen probabilidades consultas de búsqueda sed '22 /' / G s /%; s /% 20 / + / g; s / _ / + / g; '| #No algunos cambios de formato y lo más importante cambiar todos los espacioso subraya a + egrep -i "$ title2" | #search de awk title2 '{print $ 11}' | #extract sólo los datos de búsqueda sed 's / p = / = q / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab todos los datos que comienzan con q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat a humano formato legible corte -d "& amp;"-f 1 |#strip de otros parámetros awk '{print $ 0 "
"}' #ADD
enlace se rompe debido a que estamos planeando para dar salida a una página web

EOF;

Ha sido útil?Sí |No |Necesito ayuda

si "{print

La búsqueda de" $ título de "..."( $ title = "!)";print "semana en curso. ..
";impresión `/var/log/virtualmin/visihow.com_access_log gato |#GET de datos del registro de acceso $ bigcmd `;// Apoyamos p = yahoo también porque utiliza ese bicho raro. .. lol for( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i SEMANA( S) hace
";imprimir `/var/log/virtualmin/visihow.com_access_log.$i.gz zcat |#GET de datos del registro de acceso $ bigcmd `;}}

& gt?;

Ha sido útil?Sí |No |Necesito ayuda

& lt; / EF

Problemas conocidos

El grep es recoger registros con datos referenciales por lo que está regresando registros no deseados.Por ejemplo, si un usuario busca "iPhone" y era un usuario en una página de iPhone a continuación, hace clic para ir a una página de Samsung, este código recoge el iPhone de la de referencia y por lo tanto incluye que los datos que no debería.Estoy trabajando en la versión 2, que hace mucho más y va a corregir este error moviendo gran parte de la línea de comandos pre-procesamiento en php.El código será más obtuso, pero le dará los datos mucho más útiles y precisos.

Ha sido útil?Sí |No |Necesito ayuda

Versión 2: Menos de preprocesamiento línea de comandos y más procesamiento php

Esta versión tiene las siguientes ventajas / desventajas:

  • Menos línea de comandos pre-procesamiento significa que el código ya
  • más php significa más control y cuenta con
  • Ignora múltiples peticiones duplicadas de la misma ip
  • Counts múltiples búsquedas en lugar de enumerarlos varias veces
  • Mostrar información de tendencias mediante la visualización de los datos semanales
  • salida seen divs desplazables para facilitar la visualización de las páginas más populares para
  • Ordenado por longitudes de consulta totalizaron, que aproximadamente significa que las páginas más populares demuestran primera
  • Un poco rápido y sucio javascript & amp;CSS para hacer el auto divs para ampliar la visualización detallada

& lt; title & gt; preguntas del usuario & lt; / title & gt;& Lt; meta name = contenido de "robots" = "noindex" & gt;

& lt; form name = método de "sform" = "get" & gt;Buscar Título: & lt; entrada size = valor "80" = "& lt; php
si( strlen( $ _ GET [ 'titulo']) & gt; 0){
echo $ _GET [ 'titulo'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "título" / & gt;& Lt; valor de entrada = "Buscar" type = "submit" & gt;
PISTA: Introduzca * para ver todo.Se puede utilizar un título parcial o incluso regex como "Samsung * daños." & Lt; / form & gt;

Ha sido útil?Sí |No |Necesito ayuda función

sortbylen( $ a, $ b){ strlen

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

}

$ titulo = $ _GET [ 'titulo'];$ Title = preg_replace( "/ cómo / i", "", $ titulo);$ Title2 = str_replace( "", "\ +", $ titulo);$ Title2 = str_replace( "_", "\ +", $ title2);

$ bigcmd = & lt; & lt; & lt; EF

egrep -i "(q | p) =" |#Utilice Sólo los registros que tienen probabilidades consultas de búsqueda sed '22 /' / G s /%; s /% 20 / + / g; s / _ / + / g; '| #No algunos cambios de formato y lo más importante cambiar todos los espacioso subraya a + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ title2" #search para title2

EOF;

Ha sido útil Sí | No | necesito ayuda
?

if( $ title = "!"){ print

"La búsqueda de" $ título de "..."; for( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `/var/log/virtualmin/visihow.com_access_log gato | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = explode( "\ n", $ searchlogdata); foreach( $ searchlogarray como $ sdata){ $ logparts = explotan( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ partidos);$ Ss = urldecode( $ coincidencias [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))){ // mantener fuera url de búsqueda de sitiosif( ($ ip = $ labio) ||( ss = $ $ LSS)!!){ $ labio = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ matriz, 'sortbylen');foreach( $ ssdata como $ clave = & gt; $ valor){ $ sarr = explode( "|", $ value);foreach( $ sarr como $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 como $ clave2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ clave2
";.$ Stot [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata como $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Sem = 0;... Foreach( $ weekdata como $ semana){ print "
" $ sem ++ "SEMANA( S) AGO: Total de búsquedas =" $ stot [$ url] [$ sem-1] "
";.print "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'width: 800px; altura: 100px; border: 1px solid gris; overflow: scroll '& gt; $ semana ";}}}

& gt?;

Ha sido útil?Sí |No |Necesito ayuda

& lt; / EF

Tareas

Ordenar por longitud de la consulta como una especie secundaria, con consultas más largas

primera

Eso es todo.Me encantaría escuchar sus experiencias con este código o sugerencias de mejora.

Consejos Trucos & amp;Advertencias

  • Nota: Apoyo p =, así y el estándar q = porque Yahoo ser el bicho raro que es utiliza p =
  • Versión 2 php es más complejo y que se codifica rápido por lo que algunas de las variablesnombres fueron seleccionados mal.Por favor, no se quejan como su código libre.Pero si quieres repararla y volver a documentarlo y añadirlo en el wiki como la versión 3 que sería fantástico:) pagar adelante!
  • Si tiene problemas con cualquiera de estos pasos, hacer una pregunta para obtener más ayuda, o publicar en la sección de comentarios.

Comentarios

VisiHow da la bienvenida a todos los comentarios .Si no quiere mantener su anonimato, registrarse o iniciar sesión. Es gratuito.




Daniel
Autor presentado
69 artículos Comienza
2.601 Artículo ediciones
24.290 Puntos
Daniel es autor ofrecido con VisiHow.Daniel ha alcanzado el nivel de "teniente" con 24.290 puntos.Daniel ha comenzado 69 artículos y realizado 2.601 ediciones del artículo.17.578 personas han leído las contribuciones de artículos de Daniel.
Pregunta Daniel
Daniel : Hola, mi nombre es Daniel.
Daniel : ¿Puedo ayudarle con su problema sobre "Fácilmente analizar / buscar cadenas de consulta de búsqueda de una página web a partir de los registros de Apache usando awk php y utilidades de línea de comandos de Linux sed"?
Aceptar