2012-02-05 5 views
12

Estoy planeando escribir un webcrawler para un proyecto NLP, que lea en la estructura de subprocesos de un foro cada vez en un intervalo específico y analiza cada subproceso con nuevo contenido. A través de expresiones regulares, se extrae el autor, la fecha y el contenido de las nuevas publicaciones. El resultado se almacena en una base de datos.¿Erlang es la elección correcta para un webcrawler?

El lenguaje y plattform utilizado para el rastreador tienen que coincidir con los siguientes criterios:

  • fácilmente escalable en múltiples núcleos y CPUs
  • adecuados para alta I cargas/O
  • rápido de expresiones regulares
  • fácil de mantener/pocos gastos operativos

Después de algunas investigaciones, creo que Erlan g podría ser un candidato apropiado, pero he leído que no es muy bueno en el procesamiento de cadenas (y por lo tanto, coincide con expresiones regulares). Tampoco tengo ninguna experiencia sobre el factor de mantenimiento.

¿Es Erlang una buena tecnología para el escenario descrito anteriormente? Y si no, ¿cuál sería una buena alternativa?

+1

Probablemente se lo pregunte mejor en http: //programmers.stackexchange.com; cae bajo "no constructivo" aquí IMHO –

+0

Sus criterios tienen al menos tanto que ver con el diseño general y la arquitectura como el idioma. Puede construir webcrawlers escalables en Erlang, Python, Java, lo que sea. También depende de su experiencia de lenguaje de programación actual y sus escalas de tiempo. – DNA

+0

Realmente me gustaría usar Erlang para estos proyectos porque podría ser el mejor ajuste de lo que he leído hasta ahora. Mi pregunta es si la mala coincidencia de expresiones regulares lo convierte en un no-don para este proyecto y qué tan alto sería el gasto operativo (especialmente para el mantenimiento) para esto en la práctica. – Thomas

Respuesta

7

También estoy evaluando erlang para usar como rastreador web y se ve bien hasta ahora.

Hay un montón de módulos existentes votos: HTML parser, HTTP client, XPath, regex, cache.

Y otherpeople están interesados ​​en el mismo caso de uso, por lo que puede aprender de ellos.

Sin embargo, si se trata de un proyecto único, recomiendo Python/Ruby/Perl, ya que será más fácil comenzar.

+0

Gracias por la respuesta y los enlaces proporcionados. El proyecto tiene como objetivo durar más, los costos de tiempo adicional para aprender Erlang son insignificantes (de hecho, sería divertido aprender un nuevo idioma :)) – Thomas

+1

Sí, es divertido aprender algo tan diferente. He estado trabajando en este tutorial: http://learnyousomeerlang.com/ – hoju

3

Si está familiarizado y cómodo con Erlang, me quedaría con él si fuera usted, aunque no estoy familiarizado con Erlang. Dicho esto, le daré algunos consejos:

  1. No utilice expresiones regulares para analizar HTML, use XPATH en su lugar.
    HTML, mientras estructurada, es todavía muy difícil de analizar en la naturaleza y regular expressions are fairly slow and unreliable for parsing HTML.
  2. determinar cuáles son sus crawler architecture va a ser y lo que es su re-visit policy.
  3. Busque el best selection policy y ejecútelo.

Un rastreador web es un sistema bastante complejo de construir y debe preocuparse por la velocidad, el rendimiento, la escalabilidad y la concurrencia. Algunos de los rastreadores más notables están escritos en C++ and Java, pero no he oído hablar de rastreadores escritos en erlang.

+0

Gracias por la sugerencia. Mi analizador debe escribirse específicamente para el foro que voy a analizar y solo necesito partes muy pequeñas de todo el árbol xhtml, por lo que las expresiones regulares podrían ser mucho más económicas que Xpath. Creo que las preocupaciones que planteas hacen que Erlang encaje perfectamente, dependiendo del posible cuello de botella de la coincidencia de expresiones regulares. – Thomas

+0

¿Cuánto gatear esperas hacer? ¿Cuántas páginas por hora? Si no estás haciendo demasiados, entonces regex no te matará, pero aún será menos confiable y más lento que xpath, imho. Regex también es un problema para mantener, depurar y comprender, por lo que trato de evitarlo a toda costa. Esa es solo mi preferencia, aunque. Si me dice algo más sobre los requisitos de rendimiento, también puedo recomendar algunas otras cosas, como algunos documentos sobre la arquitectura de cralwer. – Kiril

+0

tiene la razón de que los regex son menos confiables, sin embargo, en general son más rápidos que XPath – hoju

3

Erlang está bien para esto. Sus delegados de la biblioteca de expresiones regulares (casi todos) trabajan a PCRE, lo que debería ser lo suficientemente rápido. ¡Pero evita cadenas y utiliza binarios en su lugar! Ambos usan mucha menos memoria y son más rápidos de traducir a cadenas C.

Cuestiones relacionadas