Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Busqueda OnLine

Muy buenas, en primer lugar quiero decir que soy algo novato en este lenguaje, ante todo pido disculpas si muestro algun tipo de desconocimiento.

Estoy programando una aplicación web de escritorio y esta se basa en recopilar información de diferentes bases de datos de revistas y publicaciones científicas.

La información la recopilo buscando por el "ISSN" (ID) de la revista y la aplicación abre un cierto numero de paginas para acceder a esas bases de datos, recopilar la información y aunarla.

El problema es que desconozco como una vez introducido el "ISSN" y almacenarlo en un string (el ISSN lo introduce el usuario), trasladar dicho String al campo de texto de las paginas que cargo y lanzar la búsqueda (seria como hacer click en el botón "Buscar", pero todo esto sin que se visualicen las paginas, sin que el usuario tenga que hacer nada, no se si me explico).

También tengo otro problema, dado que una de las paginas me pide que confirme la sesión haciendo click en un enlace y como he mencionado antes, el navegador no debe abrirse para el usuario, desconozco como se puede hacer click en dicho enlace desde el código.

Estoy programando en el entorno de netbeans y para acceder al contenido HTML uso Jsoup.

Un saludo, disculpen las molestias y gracias de antemano.

septiembre 2, 2015 | Registered Commentersitorbj

Hola.
cuando una pagina web hace este tipo de consultas, regularmente es haciendo una llamada al servidor usando los método get o post de http.
así que para "simular" el que el usuario le dio click al botón buscar. vas a tener que hacer ingeniería inversa a la pagina para saber que hace "el botón buscar", esto no es tarea difícil porque todo el código javascript se ejecuta del lado del cliente, y con un browser digamos chrome te provee una herramienta para ver dicho código.

aunque como dije antes, ese tipo de funciones se hace con una llamada al servidor entonces podes usar otra herramienta que viene con el debugguer de chrome es una pestaña llamada network y te muestra las peticiones que se han hecho desde esa pestaña solo es que localices las llamadas que se realizaron a presionar tu "boton buscar" una ves localizadas armas los parámetros necesarios para hacer la petición con jsoup

links:https://developer.chrome.com/devtools/docs/network.
pd: Este tipo de herramientas tambien existe en firefox, edge(internet explore), etc.
pero chrome es el que más uso por eso la publicidad jaja XD.

bueno espero que te sirva de algo esta información

saludos.

septiembre 2, 2015 | Unregistered Commenterjhosep

Muchas gracias por la respuesta, voy a ponerme con ello enseguida, no he utilizado antes las herramientas de desarrollador de chrome, voy a ver que tal avanzo.

septiembre 3, 2015 | Registered Commentersitorbj

Pido disculpas de antemano pero no se que tengo que buscar exactamente, he pulsado el botón buscar en una de las paginas y he visto todas las llamadas, pero desconozco como detectar cuales son las que me interesan y como poder usarlas en mi código, no se si me explico.

De nuevo lamento las molestias a causa de mi desconocimiento.

Un saludo y gracias ;)

septiembre 3, 2015 | Registered Commentersitorbj

podias decir que pagina es?

saludos

septiembre 3, 2015 | Unregistered Commenterjhosep

La pagina es:

http://epuc.cchs.csic.es/resh/

por ejemplo prueba con la búsqueda del ISSN:

1989-2837

Gracias ;)

septiembre 3, 2015 | Registered Commentersitorbj

Esta es la información que necesitas

Remote Address:161.111.47.136:80
Request URL: http://epuc.cchs.csic.es/resh/indicadores
Request Method:POST
Status Code:200 OK
From Data:
**raw**
issn=1989-2837&titulo=&buscar=Buscar
**parse data**
Issn:1989-2837
titulo:
buscar:Buscar

issn,titulo,buscar son los parámetros que debes enviar para que te retorne la respuesta correcta.
recuerda es el método post.

bueno ahí tienes todo lo que necesitas, lo que recibirás de respuesta es el html de la pagina asi que te vas hacer grande traduciendo (bueno con jsoup, no te sera tan complicado)

con la libreria que usas, este link te viene como anillo al dedo, para mandar los parámetros
http://stackoverflow.com/questions/10012399/how-to-post-data-into-website-using-jsoup.

saludos

septiembre 3, 2015 | Unregistered Commenterjhosep

Muchísimas gracias por tu inestimable ayuda, de verdad, muchas gracias.

Voy a probar a ver que tal me va, de nuevo gracias.

Un saludo ;)

septiembre 4, 2015 | Registered Commentersitorbj

Muy buenas, probe la solucion que me diste y me funciona a la perfeccion, pero una vez mas necesito ayuda.

Ahora el problema es semejante. Necesito acceder a una base de datos, la cual tiene el acceso restringido y en mi caso, utilizo una red VPN para conectarme a mi universidad y acceder a traves de ella.

Después al cargar la pagina desde la aplicación en primer lugar necesito simular un "click" a un enlace que me lleva a la pagina da búsqueda y ya allí lanzo la búsqueda como procede en los mensajes anteriores, pero he estado probando y desconozco como simular ese "click" en el enlace.

Un saludo y gracias.

septiembre 5, 2015 | Registered Commentersitorbj

Bueno, he conseguido solucionar lo del enlace, ahora el problema me da al pasar los parámetros para "simular" el botón buscar y almacenar la pagina, me da un error:

java.net.SocketException: Connection reset

septiembre 5, 2015 | Registered Commentersitorbj

Me alegro que te funcionara.

Sobre tu otro problema, es un dbms a lo que quieres acceder por la vpn o con base de datos te refieres a una pagina web?

Adelantándome a contestar,(pero espero que me aclares mi duda sobre a que te refieres con base de datos)
Si es una pagina web el procedimiento es igual al anterior, averiguas como hace la llamada al servidor y haces lo mismo, utilizando jsoup.

ahora si estas hablando de una base de datos como tal, jsoup no te servira porque el protocolo de comunicación es diferente, ahí tendrías que usar jdbc.

java.net.SocketException: Connection reset lo del error te puede salir por varias razones, pero una de las mas comunes, es que estas accediendo al servicio de forma errónea. así que verifica bien puertos, credenciales, parámetros etc.


Saludos.

septiembre 6, 2015 | Unregistered Commenterjhosep

Si, perdón, me refería a una pagina web, realizo la llamada de la misma manera, averiguo cual es la llamada al servidor que tiene el método POST y entonces obtengo los parámetros y es cuando me surge el error "java.net.SocketException: Connection reset".

Gracias y un saludo.

septiembre 6, 2015 | Registered Commentersitorbj

Creo que se porque me da el error:

Para acceder a los datos que quiero, manualmente (como haría un usuario sin usar la aplicación que estoy desarrollando vamos), realizo lo siguiente:

acceso a pagina web 1 -> click en enlace de confirmacion de sesion
acceso a pagna web 2 a traves del enlace -> click en parametro de busqueda
acceso a pagina web 3 tras buscar anteriormente en web2 -> busqueda final.

Para esto debo situarme en la web3 pero no puedo hacerlo directamente dado que me solicita la confirmación de sesión.

He conseguido situarme en la web2 a través del enlace de la web1, lo que ocurre es que la dirección con la que me sitúo en web2 no es la que lanza la búsqueda para acceder a web3. Pongo el caso:

De esta pagina: http://admin.webofknowledge.com/SessionError.cgi?&DestApp=JCR&Error=No+SID+Received

Obtengo : http://admin.webofknowledge.com/portal.cgi?SID=V2NivNcdXU5QTYyCUzl&SrcApp=CR&Init=Yes&Func=Frame&DestApp=JCR&IsProductCode=Yes

Ya estoy situado en la web 2, donde hago la primera búsqueda mediante el "click" en buscar, en este caso es submit, pero da igual jeje, lanzo la búsqueda y obtengo los parámetros que necesito.

Lo que ocurre que cuando lanza la búsqueda, la url que la lanza es : http://admin-apps.webofknowledge.com/JCR/JCR es a esta url a la que tengo que llamar pasando los parámetros (no a la que obtengo del enlace de confirmación)

El problema es que, si pongo esta ultima url me salta la pagina web del enlace de confirmación, me redirige, supongo porque piensa que no se inició la sesión.

Recuerdo que todo esto lo hago a través una VPN.
No se si me he explicado bien, un saludo y gracias de nuevo ;)

septiembre 6, 2015 | Registered Commentersitorbj

hola @sitorbj, lo que sea vpn o no, no es el problema, ya que es transparente, en pocas palabras para los programas le es indiferente si la conexion es vpn o no.

Por lo que mencionas el clavo es que utiliza la sesión, regularmente las sesiones se mantiene con cookies, así que vas a tener que usar esas cookies para mandar el id de sesion correcto, que es el otro parámetro que te pide, asi que todo esto que hace el navegador te va tocar hacerlo a ti, tu mejor amigo un debbuguer web, para ver todas las llamadas y archivos que recibis del sitio.

dale un vistazo al siguiente link: te puede ayudar para mantener la sesión
http://stackoverflow.com/questions/7139178/jsoup-cookies-for-https-scraping

pero como te digo cada sitio es distinto, así que tendrás que hacer un poco de ingeniería inversa para poder obtener tus datos.

saludos

septiembre 7, 2015 | Unregistered Commenterjhosep

Lo que tu estas realizando se le conoce como Web scrapping, busca en google con este nombre así podrás encontrar muchas más información de como realizar tu trabajo con éxito y las complicaciones que puedas tener.

saludos

septiembre 7, 2015 | Unregistered Commenterjhosep