He abordado este problema en el pasado.
Para los datos del historial de precios, utilicé la API de yahoo. Cuando digo API, me refiero a que estaba haciendo una solicitud HTTP para obtener un archivo CSV de datos del historial de precios. Lamentablemente, eso solo le permite obtener datos de una empresa a la vez, durante un período de tiempo que especifique. Así que primero hice una lista de todos los símbolos de cotización, y repetí sobre eso, llamando a la API de yahoo para cada uno. Es posible que pueda encontrar un sitio web que enumere los símbolos de cotización también, y simplemente descargue periódicamente esa lista.
Haga esto con demasiada frecuencia y demasiado rápido, y su sitio web podría bloquearlo. Agregué un código para limitar la frecuencia con la que hice las solicitudes http. También persistí en mis datos para no tener que volver a obtenerlos. Siempre insistiría en la forma de datos en bruto/sin procesar, su código podría cambiar de maneras que dificulten el uso de cualquier otra cosa. Avro/Thrift podría ser una excepción, ya que estos admiten la evolución del esquema.
Para otros tipos de datos, es posible que no tenga ninguna API que le proporcione buenos archivos CSV. Tuve que lidiar con ese problema muchas veces. Aquí está mi consejo.
A veces, un sitio web llama a un servicio web tranquilo detrás de las escenas, puede descubrirlo mediante el uso de Firebug. A veces también requerirá ciertos encabezados, que también puede descubrir usando Firebug.
Si se ve obligado a trabajar con HTML, hay varias bibliotecas de Java que pueden ayudarlo. apache.commons.http es una biblioteca que puede usar para realizar fácilmente solicitudes http y manejar sus respuestas. Google también tiene una jarra de cliente http, que probablemente valga la pena investigar.
La API JSoup es excelente en el análisis de datos HTML, incluso cuando está mal formateado, y no XHTML. También funciona con XML. En lugar de atravesar o visitar nodos en la jerarquía de jsoup, aprenda XPath y utilícelo para seleccionar lo que desea. El sitio web puede cambiar periódicamente el formato de su página web, que debería ser fácil de manejar y corregir si está usando JSoup, y difícil de enfrentar de otra manera.
Si tiene que trabajar con JSON, use la biblioteca de Jackson para analizarlo.
Si tiene que trabajar con CSV, use la biblioteca OpenCSV para analizarlo y manejarlo.
Además, siempre almacene los datos en bruto y evite realizar solicitudes HTTP innecesarias para que no se bloquee. Me han bloqueado las finanzas de google un par de veces, pueden hacerlo. Afortunadamente, el bloque expira. Es posible que incluso desee agregar un período de espera aleatorio entre las solicitudes.
Gracias. ¿Hay alguna forma programática? – Kunal
Sería bastante trivial escribir un analizador para extraer los datos del html. – Joel
@Joel: aún más fácil para un CSV. –