2009-06-10 18 views
6

Necesito crear un programa de recopilación de contenido que simplemente lea los números en páginas web específicas y guarde los datos para su posterior análisis. No lo necesito para buscar enlaces o datos relacionados, solo recopilar todos los datos de sitios web que tendrán contenido cambiante a diario.¿Cuál es el lenguaje de programación ideal para un rastreador web?

Tengo muy poca experiencia en programación, y espero que esto sea bueno para aprender. La velocidad no es un gran problema, estimo que el rastreador tendría que cargar como máximo 4000 páginas en un día.

Gracias.

Editar: ¿Hay alguna manera de probar antes de tiempo si los sitios web de los que estoy recopilando datos están protegidos contra los rastreadores?

Respuesta

9

Python probablemente, o Perl.

Perl tiene un muy buen LWP (Library for WWW in Perl), Python tiene urllib2.

Ambos son lenguajes de scripting fáciles de usar disponibles en la mayoría de los sistemas operativos.

He hecho rastreos en Perl bastantes veces, es una tarde de trabajo.

Y no, en realidad no pueden protegerse de los rastreadores, a excepción del uso de CAPTCHA de ordenación; todo lo demás es más fácil de descifrar que de configurar.

Hubo un punto acerca de Java: Java está bien. Es más detallado y requiere una configuración de entorno de desarrollo: para que no lo haga en una noche, probablemente una semana. Para una tarea pequeña, que el autor de la pregunta indicó, podría ser una exageración. Por otro lado, hay bibliotecas muy útiles como lint, tagsoup (recorrido DOM para HTML aleatorio) y lucene (indexación y búsqueda de texto completo), por lo que es posible que desee Java para proyectos más serios. En este caso, recomendaría la biblioteca Apache commons-httpclient para rastreo web (o nutch si está loco :).

Además, hay productos de estantería que supervisan los cambios en sitios web específicos y los presentan de manera útil, por lo que puede obtener uno.

+5

los sitios web no pueden protegerse contra los rastreadores, pero los rastreadores están obligados a obedecer el Protocolo de exclusión de robots, y los clientes tienen el honor de cumplir con los términos de servicio de cualquier sitio web. –

+0

Estoy de acuerdo contigo. – alamar

+0

La mayoría de las cosas en la web muestran Java para la programación de rastreadores. ¿Es Java demasiado complicado? o cuál es el problema con eso? – Alex

-3

Yo diría PHP. Es un lenguaje orientado a la web, lo que significa muchas funciones de la biblioteca para hacer todas las pequeñas cosas que tendrás que hacer en un proyecto como este. Tiene una buena capacidad para esto incorporado (CURL), y es un lenguaje muy simple. Lo superarás relativamente rápido si sigues programando en él, pero para algo simple como este, es una buena opción.

+1

No recomendaría PHP para las secuencias de comandos del lado del cliente. Se puede hacer, pero está al revés. – alamar

+1

Lo hice y tengo que decir que fue terrible. La falta de enhebrado está causando muchos problemas al escribir una araña eficiente. – Lothar

+0

He hecho múltiples rastreadores de PHP, está bien pero a veces simplemente se niega a obtener elementos de algunas URL, pero créanme que Python es la mejor opción, no he trabajado con Perl, pero vamos hombre, Python es el único ¡eso usado por Google! –

2

¿Hay alguna manera de probar antes de tiempo si los sitios web de los que soy recopilación de datos están protegidos contra rastreadores?

Aparte de CAPTCHAS, es una buena etiqueta respetar el contenido del archivo robots.txt si existe.

7

El idioma con el que se siente más cómodo es más que el mejor idioma para usar.

que tienen muy poca programación experiencia

Usted puede encontrar que un rastreador web es un poco de un bautismo de fuego y que necesita para construir algunas otras aplicaciones más triviales para familiarizarse con su lenguaje elegido (y marco si corresponde).

¡Buena suerte!

1

Perl o python son las opciones obvias, depende de lo que más te convenga realmente al final del día. Tampoco son tan difíciles, pero en general si encuentras que prefieres un lenguaje lingüístico fluido que sea realmente flexible, perl te iría mejor, donde como si prefirieras un lenguaje más rígido con una mentalidad más matemática (especialmente al creer que solo hay una forma de hacer algo bien) entonces probablemente te sientas más como en casa en Python. Otros lenguajes pueden hacer el trabajo bastante bien, pero esos dos son opciones obvias debido a la portabilidad y la fortaleza de los lenguajes para las tareas de creación de scripts CLI, especialmente la manipulación de texto, además de ser sólidos lenguajes webdev que conducen a una gran cantidad de módulos útiles disponibles para tareas orientadas a web (dando el beneficio de php mencionado, pero sin los aspectos negativos de php para el cliente). Si hay un gran número de módulos útiles disponibles para ti, entonces perl tiene cantidades masivas para este tipo de tarea que cualquier otro idioma (en CPAN), vale la pena verificar si hay código que puedas volver a usar antes de tomar el sumergirse en el idioma que utilizará. En ciertas áreas, uno es más rápido que el otro (python generalmente sobresale en matemáticas complejas, perl generalmente puede procesar texto más rápido, sin embargo depende de cómo lo hagas).

Existen otras opciones de idioma, un lenguaje compilado es menos portátil y, por lo general, más difícil de configurar en un servidor, sin embargo, se ejecuta más rápido. Los lenguajes de scripting generalmente están diseñados para manipular texto y archivos con mayor facilidad que los lenguajes compilados, aunque no siempre son ciertos. Me siento más cómodo con Perl, así que lo usaría, pero yo le digo que esa no es la base sobre la que debe tomar una decisión, descubra cuál tiene más recursos que puede usar y cuál le gusta más a la sensación (lea algunos codifique qué estilo tiene más sentido para usted) y luego decida.

Oh y, por supuesto, tengo un libro sobre programación de inteligencia colectiva dirigido a principiantes sobre el tema, nunca lo leí pero se supone que es bastante bueno, hojeándolo en una tienda y considero que se trata principalmente de web -Los algoritmos del navegador ... Utiliza Python para ejemplos.

3

Creé un webcrawler una vez, pero fue creado para buscar en los sitios más enlaces a otros sitios y seguirlos. Tenía que recordar esos enlaces y asegurarme de que no visitaría un sitio dos veces, por lo que necesitaba una forma muy rápida de verificar si había URL duplicadas. Para hacer esto, creé mi propia tabla hash en Delphi 2007. Con algunos conocimientos adicionales sobre cómo usar la interfaz COM de Internet Explorer, pude leer bastantes páginas en poco tiempo. He usado Delphi para escribir este rastreador porque quería mucho rendimiento.

Por otra parte, también elegí Delphi porque es el idioma con el que me siento más cómodo, además de que me ayudó a aprender mucho sobre varios temas interesantes, incluso sobre cómo escribir sus propios algoritmos de tablas hash. Además, fue un desafío muy interesante para un programador experimentado como yo.

Mi consejo ya ha sido proporcionado: use las herramientas con las que se sienta más cómodo.

1

Si eres un principiante, sugeriría un lenguaje "fácil" como REBOL. En REBOL, una secuencia de comandos básica para comprobar un montón de páginas de wikipedia para las modificaciones se vería como el siguiente código.Obviamente, "fácil" es subjetivo y aún necesitará algunos cambios básicos en este código para cumplir con sus requisitos.

registros: carga% records.txt
; (Contenido del archivo records.txt se parece a esto: la sangría no es importante)
[
        [en.wikipedia.org/wiki/Budget_deficit
        "Presupuesto US Déficit (Wikipedia)"
        < {li id ​​= "lastmod" > Esta página fue modificada por última vez}
        "1 de junio de 2009 a las 11:26. "]

        [en.wikipedia.org/wiki/List_of_U.S._states_by_unemployment_rate
        "Tasa de desempleo de Estados Unidos (Wikipedia)"
        {< li id ​​= "lastmod" > Esta página fue modificada por última vez}
        "25 may 2009 a las 20:15."]
]

; Ahora bucle a través de los registros y comprobar web para los cambios
foreach registros REC [
    html: leer rec/1    ; añadir a errores chking aquí por 404 o tiempo de espera
        de análisis/todas html [cualquiera [a través de REC/3 copia curr-mod-fecha para </li >]]
            menos rec/4 = curr-mod-fecha [
                    de impresión [ "cambio detectado:" rec/2]
                   ; analizar de nuevo para recoger y guardar los datos de la página específica aquí
                   ; actualizar% registros.archivo txt con marcas de tiempo actualizadas
         ]
]

REBOL no es bien conocida, pero es amable, muy pequeña, multiplataforma y GUI-habilitado. He tenido mucho éxito con esto para scripts rápidos y sucios.

Cuestiones relacionadas