entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

Extraccion y Analisis de datos con regex

Hola estimados colegas En esta ocasión Necesito crear una función o un script que sea capaz de extraer los datos de una página cómo sería Una cadena de texto y un número luego almacenarlo en un archivo de texto para esto voy a emplear las funciones que lleva incorporado nativamente PHP entonces resumiendo tengo dos ficheros el primero se encarga de analizar las páginas y encontrar coincidencias es decir mi página sujeta análisis está una serie de datos En fin luego de haber analizado y filtrado los datos deberían de mostrarse en otra página para que lo puedan entender mejor voy a tomar un ejemplo el famoso trivago que compara en tiempo real otro ejemplo podría ser una agencia de viajes que compara las mejores ofertas muestra solo los más baratos low cost

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h3>batman</h3>
    <h4>genero del juego : Aventura</h4>
    <h5>puntuacion : 10</h5>

    <h3>superman</h3>
    <h4>genero del juego : Aventura</h4>
    <h5>puntuacion : 5</h5>

    <h3>mafia</h3>
    <h4>genero del juego : arcade</h4>
    <h5>puntuacion : 9</h5>

    <h3>mafia</h3>
    <h4>genero del juego : arcade</h4>
    <h5>puntuacion : 8</h5>
</body>
</html>

entre tantas funciones disponibiles cual deberia utilizar para conseguir que los datos se filtren en base al genero y la puntuacion

<?php 

?>

1voto

magarzon comentado

Y estas tantas funciones disponibles que ya has encontrado, ¿cuáles son? ¿Qué has intentado con ellas? ¿Dónde te has parado? Porque decir que no puedes continuar porque tienes muchas opciones es dejarnos todo el trabajo a nosotros.

Por cierto, si lo de regex es porque piensas utilizar funciones regex para obtener elementos html, ya te anticipo que es una de las formas más ineficientes de hacer un crawler (que es uno de los nombres que recibe una aplicación que analiza una página html para extraer datos)

0voto

steven comentado

me gustaria poder crear un crawler capaz de hacer el analisis y la extraccion a cualquier tipo de documento html,xhtml,xml,pdf para mi proposito seria el ultimo tipo pero puedo deducir que sera de una dificultad mucho mayor
retornando a lo nuestro hay una funcion que se usa junto con regex me refiero a preg_match segun la documentacion debe llevar cuatro parametros que son pattern,subject,matches y flags esta ultima lleva otros parametros adicionales, por si las dudas te dejo una descripcion. hay tambien funciones similares pero desconosco creo que son mas avanzadas y no es mi caso de utilizarla.
ademas esta lleno de terminos extraños

(PHP 4, PHP 5, PHP 7)
preg_match — Realiza una comparación con una expresión regular

Descripción ¶

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
Busca en subject una coincidencia con la expresión regular dada en pattern.

Parámetros ¶

pattern
El patrón de búsqueda, como cadena.

subject
La cadena de entrada.

matches
Si se proporciona matches, entonces éste se llena con los resultados de la búsqueda. $matches[0] contendrá el texto que coincidió con el patrón completo, $matches[1] tendrá el texto que coincidió con el primer sub-patrón entre paréntesis capturado, y así sucesivamente.

flags
flags puede estar seguido de la siguiente bandera:

PREG_OFFSET_CAPTURE
Si se pasa esta bandera, por cada coincidencia producida, el índice de la cadena añadida también será devuelto. Observe que esto cambia el valor de matches dentro de una matriz donde cada elemento es una matriz consistente en la cadena coincidente en el índice 0 y su índice dentro de la cadena subject en el índice 1.
offset
Normalmente, la búsqueda comienza por el principio de la cadena objetivo. El parámetro opcional offset se puede usar para especificar el lugar alternativo desde el cual comenzar la búsqueda (en bytes).

suponiendo que use esta funcion con que funcion deberia invocar mi archivo include o get-file cual me recomiendas, luego despues de esto debo de pasar la funcion get-match y luego como seria el resto
por ahora tengo en mente algo asi

<?php
include(catalogo.html);
file_get_match(expresiones);

1voto

magarzon comentado

Varias cosas:

  1. Si tu objetivo es analizar "cualquier" documento... ¿qué vas a poner en la expresión regular?
  2. Las expresiones regulares, precisamente no son lo más fácil de la programación (aunque es muy conveniente dominarlas)
  3. Las funciones de expresiones regulares, son altamente ineficientes, sobre todo a la hora de analizar cadenas grandes, como puede ser un fichero.

0voto

steven comentado

ok suponiendo que quiero extraer todas las palabras aventura de mi documento html el codigo seria asi segun como lo entendi yo se usan los delimitadores de barras
\aventura\ con esto se buscarian todas las coincidencias y se apartaria del resto del codigo luego faltaria la opcion de pasar el filtrado en un documento de texto plano. aclarame bien el tercer punto cual es mas eficiente del regex para la elaboracion de texto.

0voto

magarzon comentado

¿Y de qué te sirve coger todas las palabras aventura de un documento? Entiendo que lo que querrás es coger donde ponga aventura en una sección determinada del documento, porque si no, puedes coger un "aventura" que esté en un banner, o en un enlace que no tenga nada que ver con el documento...

-1voto

steven comentado

claro debo de especificar que partes del documento analizar sin embargo no creo que sea muy dificil de filtrar los links y los banners de todos modos todabia lo tengo un poco borroso y abstracto la manera de programarlo.
mientras que ordeno las ideas y organizo mentalmente el proyecto podrias quitarme una duda acerca de una cosa en js, tengo un menu con tres elementos cuando un elemento o li sea clickeado deberia de ponerse verde el fondo, esto deberia ser asi para todos los elementos. para que puedas enterdelo mejor te dejo el code

<ul id="menu">
  <li>item1 </li>
  <li>item2</li>
  <li>item3</li>
</ul>
var items = document.getElementsBytagName('li')
items.addEventListener('click', function(){

                     style.backgroundColor="green"
})

cuando uno de mis elementos es clickeado deberia de cambiarle el color a verde solo al elemnto clickeado, sin embargo esto no pasa, acaso deberia de hacer un bucle for o asignar un eventlistner para cada uno

1voto

magarzon comentado

Vuelves a hacer otra pregunta no relacionada dentro de un comentario. Abre pregunta

0voto

steven comentado

ok disculpa lo hice porque mi pregunta estaba temporalmente suspendida, ahora lo acaban de publicar echale un bisteck

1 Respuesta

1voto

carlossevi Puntos63580

Enhorabuena @steven cada día vas desbloqueando nuevas tecnologías por las que preguntas. Vas tocando un poquito de todo y no sé si llegas a dominar alguna de ellas, algo que debo decir que me parece un error.

Para hacer un parser de HTML veo mejor que utilices un analizador de XML en lugar de utilizar expresiones regulares. La ventaja de tratarlo como XML es que puedes ir leyendo y buscando en árbol. Para analizar XML hay muchas funciones disponibles en casi todos los lenguajes, por ejemplo la extensión SimpleXML para PHP.

Una vez te metas en el maravilloso mundo del XML, te recomiendo que le eches un vistazo a las consultas XPath, que permiten construir expresiones que recorren y procesan un documento XML.

2votos

magarzon comentado

¡Alerta eficiencia!

SimpleXML es simple en su uso, como su propio nombre indica, pero para analizar XML son mucho más eficientes en cuanto a consumo de memoria y velocidad xml_parse, que es un SAX parser y XMLReader

0voto

steven comentado

chicos aver tengo presente que hay tres apis para manipular xml el primero en implementarse fue el sax luego el simple y el dom, opino que el ultimo api no es de mucha ayuda porque para ese proposito existe el maginifico javascript un lenguaje simple y potente cuya caracteristica lo hace tan especial. el simplexml tiene una sintaxis simple y por eso creo que es una buena opcion, pero no estoy completamente seguro si podra a cumplir mi objetivo, en su momento lo vere con mas calma por ahora creo que seguire estudiando regex.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta