2010-12-05 14 views
9

Construir un motor de comparación de compras y necesito construir un motor de rastreo para realizar el proceso de recopilación de datos diarios.Cualquier buen marco de rastreo de Web de código abierto en C#

He decidido construir el rastreador en C#. Tengo mucha mala experiencia con HttpWebRequest/HttpWebResponse Classes y se sabe que son muy problemáticos e inestables para rastreos grandes. Así que he decidido NO construir sobre ellos. Incluso en el marco 4.0 tienen problemas.

Hablo según mi propia experiencia personal.

Me gustaría recibir las opiniones de los expertos que han estado codificando rastreadores, si conocen algún buen framework de código abierto, como java tiene nutch y apache commons que son bibliotecas muy estables y altamente robustas.

Si hay algunos frameworks de rastreo ya existentes en C#, procederé y construiré mi aplicación encima de ellos.

Si no, planeo extender esta solución desde el proyecto de código y extenderla.

http://www.codeproject.com/KB/IP/Crawler.aspx

Si alguno me puede sugerir un mejor camino, estaré muy agradecido.

EDITAR: Algunos sitios que tengo que rastrear renderizan la página usando scripts Java muy complejos, ahora esto agrega más complejidad a mis rastreadores web ya que necesito poder rastrear las páginas renderizadas por JavaScript. Si alguien ha usado cualquier biblioteca en C# que pueda rastrear javascript renderizado, por favor, comparta. He usado watin que no prefiero y también sé sobre selenio. Si conoce algo más que estos, por favor, comparta conmigo y la comunidad.

+9

¿Cómo funciona HttpWebRequest buggy? – SLaks

+0

'SELECCIONAR' no está roto. – neo2862

+1

http://htmlagilitypack.codeplex.com/ –

Respuesta

3

PhantomJS + HtmlAgilityPack

Sé que este tema es un poco viejo, pero he tenido los mejores resultados, con mucho, con PhantomJS. Hay un paquete NuGet para él, y combinarlo con HtmlAgilityPack lo convierte en una herramienta de raspado bastante decente que busca &.

Este ejemplo solo utiliza las capacidades de análisis integradas de PhantomJS. Esto funcionó con una versión muy antigua de la biblioteca; dado que parece estar aún en desarrollo activo, sería seguro asumir que se han agregado aún más capacidades.

void Test() 
{ 
    var linkText = @"Help Spread DuckDuckGo!"; 
    Console.WriteLine(GetHyperlinkUrl("duckduckgo.com", linkText)); 
    // as of right now, this would print ‘https://duckduckgo.com/spread’ 
} 

/// <summary> 
/// Loads pageUrl, finds a hyperlink containing searchLinkText, returns 
/// its URL if found, otherwise an empty string. 
/// </summary> 
public string GetHyperlinkUrl(string pageUrl, string searchLinkText) 
{ 
    using (IWebDriver phantom = new PhantomJSDriver()) 
    { 
     phantom.Navigate.GoToUrl(pageUrl); 
     var link = phantom.FindElement(By.PartialLinkText(searchLinkText)); 
     if(link != null) 
      return link.GetAttribute("href"); 
    } 
    return string.Empty; 
} 
2

Sé de algo llamado NCrawler, disponible en codeplex. No lo usé personalmente, pero un colega dice que funciona bien.

+0

NCrawler parece ser una buena solución, probándola ahora. –

0

Ncrawler no soporta Javascript.But se ve muy bien, y fácil de usar solución si usted no necesita Javascript ejecución

2

arachnode.net puede procesar JavaScript.

3

Abot C# Web de rastreadores

Descripción de http://code.google.com/p/abot/ dice: Abot es una fuente de C# rastreador web abierta construido para la velocidad y la flexibilidad. Se ocupa de la plomería de bajo nivel (multiprocesamiento, solicitudes http, programación, análisis de enlaces, etc.). Simplemente se conecta a eventos clave para procesar datos o complementa sus propias implementaciones de interfaces centrales para tomar el control completo del proceso de rastreo.

no lo han usado.

Cuestiones relacionadas