elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Parsear tablas creadas con javascript
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Parsear tablas creadas con javascript  (Leído 327 veces)
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Parsear tablas creadas con javascript
« en: 25 Enero 2019, 15:02 »

hola

Si entras en esta página como ejemplo, verás aparece una tabla.  

https://www.marca.com/futbol/primera-division/clasificacion.html

Esta tabla está creada con javascript.

Antiguamente simplemente obteniendo el código fuente HTML de la página con System.Net.WebClient  podías obtener la clasificación tabla:

Código
  1. <div id="contenedor-portadilla"> <div id="contenido" class="estirar">
  2. <div class="clasificacion borde-caja">
  3. <table class="tablaclasificacion ampliada" id="calsificacion_completa">
  4. <tr class="clasifencabezado">
  5. <th colspan="2" class="sinfondo">&nbsp;</th>
  6. <th colspan="7">Totales</th>
  7. <th colspan="7">En casa</th>
  8. <th colspan="7">Fuera</th>
  9.  
  10. ....
  11. <tr>
  12. <td class="posicion ascenso">1</td>
  13. <td class="equipo">Levante</td>
  14. <td class="pj">24</td>
  15. <td class="pg">16</td>
  16. <td class="pe">4</td>
  17. <td class="pp">4</td>
  18. <td class="gf">33</td>
  19. <td class="gc">17</td>
  20. <td class="pts seleccionado">52</td>
  21. <td class="cpj">12</td>
  22. <td class="cpg">10</td>
  23. <td class="cpe">2</td>
  24. <td class="cpp">0</td>
  25. <td class="cgf">19</td>
  26. <td class="cgc">7</td>
  27.  
  28.  

No se lo bastante sobre javascript aunque he tratado de encontrar un servidor o enlace desde donde obtiene los datos para construir la tabla. Eso sí sabría hacerlo yo desde javascript, pero no se como o de donde obtiene los datos para construir la tabla. Desglosar cada archivo javascript tratando averiguar como lo hacen sin ser yo un gurú de esto es para mí tarea imposible.

Podría pensarse, una vez la página está cargada guardas y se creará un HTML  con la tabla.... pues no, ya he probado, se ve en blanco. Es fácil de entender cuando desde el navegador abres el un menú emergente y pulsas "ver código fuente de la página". Verás que no existe tal tabla en el código fuente si no como digo llama a un código javascript para crearla, obvio debe ser online. Ya que en los propios código javascript tampoco está la tabla,que si no me equivoco estos acceden online a un servidor desde el cual obtienen los datos para construir la tabla. ¿Un xml quizás? no se.

Sin embargo si que puedo ver la tabla online desde un navegador usando "inspeccionar elemento".

Así que bueno, otro desafío más.



buenas,
He comenzado esta tarde con mi investigación sobre el tema. Para los que tratéis de intentarlo si fuera el caso no sabéis como yo como conseguirla, ahora mismo he probado varias cosas, sin entrar en tema VB o C# de Net. Debido claro está a que nunca me he topado con esto y pese a que he buscado en Google y no he encontrado nada al respecto puesto que no se por donde tirar en la búsqueda.

De modo que me he centrado en intentar averiguar como se crea la tabla. Para ello he descargado la página íntegra (obvio no todo el contenido que se pueda encontrar en el servidor, como PHPs) desde el navegador usando "Guardar como...".  También online he visualizado el código fuente y lo he copiado y he creado con un un HTML.

Tanto con el código obtenido online como el obtenido con "Guardar como" no cargan la tabla. La diferencia de ambos es que el segundo trata de obtener los archivos desde el directorio desde donde se ejecuta el HTML, y el primero debería hacerlo buscando en el servidor. Sin embargo ninguno de los dos carga la tabla.

Lo que voy a hacer ahora es trabajar desde Chrome o Firefox usando el modo desarrollador del navagador. Modificando el código y tratar de averiguar que partes de la página intervienen en el desarrollo de la tabla.

Saludos


« Última modificación: 25 Enero 2019, 20:02 por okik » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Parsear tablas creadas con javascript
« Respuesta #1 en: 25 Enero 2019, 20:09 »

Si depuras con el inspeccionador de elementos puedes averiguar la query a la API que están usando para generar el contenido de dicha tabla (mediante la respuesta obtenida en formato JSON)...


Tan solo tienes que descargar la respuesta como una cadena de texto (recordemos que estará en formato JSON), y parsear la cadena como prefieras. Puedes usar la librería de terceros JSON.NET para parsearlo, o bien puedes usar las funcionalidades built-in de .NET Framework para deserializar el documento JSON a modo de diccionario, o también a modo de XML... de lo cual te muestro un ejemplo a continuación:

Código
  1. Dim uri As New Uri("https://api.unidadeditorial.es/sports/v1/classifications/current/?site=2&type=10&tournament=0101")
  2.  
  3. Using wc As New WebClient With {.Encoding = Encoding.UTF8}
  4.    Dim jsonData As Byte() = wc.DownloadData(uri)
  5.  
  6.    Using jsonReader As XmlDictionaryReader =
  7.        JsonReaderWriterFactory.CreateJsonReader(jsonData, 0, jsonData.Length, wc.Encoding,
  8.                                                 New XmlDictionaryReaderQuotas(), Nothing)
  9.  
  10.        Dim xml As XElement = XElement.Load(jsonReader)
  11.        Dim ranks As IEnumerable(Of XElement) = xml.<data>.<item>.<rank>.<item>
  12.  
  13.        For Each rank As XElement In ranks
  14.            Console.WriteLine("Nombre de equipo: {0}", rank.<name>.Value)
  15.            Console.WriteLine("Puntos Totales..: {0}", rank.<standing>.<points>.Value)
  16.            Console.WriteLine("Puntos (En Casa): {0}", rank.<standing>.<home>.<points>.Value)
  17.            Console.WriteLine("Puntos (Fuera)..: {0}", rank.<standing>.<away>.<points>.Value)
  18.            Console.WriteLine("")
  19.        Next rank
  20.  
  21.    End Using
  22.  
  23. End Using

Citar
Código:
Nombre de equipo: Barcelona
Puntos Totales..: 46
Puntos (En Casa): 26
Puntos (Fuera)..: 20

Nombre de equipo: Atlético
Puntos Totales..: 41
Puntos (En Casa): 26
Puntos (Fuera)..: 15

Nombre de equipo: Real Madrid
Puntos Totales..: 36
Puntos (En Casa): 22
Puntos (Fuera)..: 14

...

Saludos.


« Última modificación: 25 Enero 2019, 20:23 por Eleкtro (sin pilas) » En línea


okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Parsear tablas creadas con javascript
« Respuesta #2 en: 25 Enero 2019, 20:28 »

Si depuras con el inspeccionador de elementos puedes averiguar la query a la API que están usando para generar el contenido de dicha tabla (mediante la respuesta obtenida en formato JSON)...


Tan solo tienes que descargar la respuesta como una cadena de texto (recordemos que estará en formato JSON), y parsear la cadena como prefieras. Puedes usar la librería de terceros JSON.NET para parsearlo, o bien puedes usar las funcionalidades built-in de .NET Framework para deserializar el documento JSON a modo de diccionario, o también a modo de XML... de lo cual te muestro un ejemplo a continuación:

Código
  1. Dim uri As New Uri("https://api.unidadeditorial.es/sports/v1/classifications/current/?site=2&type=10&tournament=0101")
  2.  
  3. Using wc As New WebClient With {.Encoding = Encoding.UTF8}
  4.    Dim jsonData As Byte() = wc.DownloadData(uri)
  5.  
  6.    Using jsonReader As XmlDictionaryReader =
  7.        JsonReaderWriterFactory.CreateJsonReader(jsonData, 0, jsonData.Length, wc.Encoding,
  8.                                                 New XmlDictionaryReaderQuotas(), Nothing)
  9.  
  10.        Dim xml As XElement = XElement.Load(jsonReader)
  11.        Dim ranks As IEnumerable(Of XElement) = xml.<data>.<item>.<rank>.<item>
  12.  
  13.        For Each rank As XElement In ranks
  14.            Console.WriteLine("Nombre de equipo: {0}", rank.<name>.Value)
  15.            Console.WriteLine("Puntos Totales..: {0}", rank.<standing>.<points>.Value)
  16.            Console.WriteLine("Puntos (En Casa): {0}", rank.<standing>.<home>.<points>.Value)
  17.            Console.WriteLine("Puntos (Fuera)..: {0}", rank.<standing>.<away>.<points>.Value)
  18.            Console.WriteLine("")
  19.        Next rank
  20.  
  21.    End Using
  22.  
  23. End Using

Saludos.

joder siempre te me adelantas justo ahora lo iba a postear  :laugh:

Gracias Elektro

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con un javascript y tablas
Desarrollo Web
Chazy Chaz 0 1,066 Último mensaje 30 Mayo 2012, 04:14
por Chazy Chaz
Parsear HTML
.NET (C#, VB.NET, ASP)
spiritdead 2 1,595 Último mensaje 26 Diciembre 2012, 23:55
por spiritdead
parsear un XML
PHP
Servia 0 984 Último mensaje 18 Mayo 2013, 14:41
por Servia
eliminar tablas creadas por session
Bases de Datos
landerzx 1 885 Último mensaje 19 Diciembre 2014, 18:07
por Shell Root
problema con variables creadas en funciones
Java
4dr14n31t0r 2 808 Último mensaje 19 Noviembre 2015, 02:20
por furciorifa
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines