2010-12-05 38 views
9

Je construis un moteur de comparaison d'achats et j'ai besoin de créer un moteur d'exploration pour effectuer le processus quotidien de collecte de données.Tout bon framework de recherche Web Open Source en C#

J'ai décidé de construire le crawler en C#. J'ai beaucoup de mauvaise expérience avec les classes HttpWebRequest/HttpWebResponse et elles sont connues pour être très buggées et instables pour les grandes explorations. J'ai donc décidé de ne pas construire sur eux. Même dans le cadre 4.0, ils sont bogués.

Je parle par ma propre expérience personnelle. J'aimerais connaître les avis d'experts qui ont codé des robots d'exploration, s'ils connaissent de bons frameworks d'exploration open source, comme java a nutch et apache commons qui sont des bibliothèques très stables et très robustes.

S'il existe déjà des structures d'analyse en C#, je vais aller de l'avant et construire mon application par-dessus.

Si ce n'est pas mon intention d'étendre cette solution du projet de code et de l'étendre.

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

Si quelqu'un peut me proposer un meilleur chemin, je serai très reconnaissant. EDIT: Certains sites que je devais explorer rendaient la page en utilisant des scripts Java très complexes, ce qui ajoutait de la complexité à mes robots d'exploration, car je devais être capable d'explorer des pages rendues par JavaScript. Si quelqu'un a utilisé une bibliothèque en C# qui peut explorer javascript, n'hésitez pas à partager. J'ai utilisé du watin que je ne préfère pas et je connais aussi le sélénium. Si vous connaissez quelque chose d'autre que ceux-ci, n'hésitez pas à partager avec moi et la communauté.

+9

Comment HttpWebRequest est-il bogué? – SLaks

+0

'SELECT' n'est pas cassé. – neo2862

+1

http://htmlagilitypack.codeplex.com/ –

Répondre

3

PhantomJS + HtmlAgilityPack

Je sais que ce sujet est un peu vieux, mais j'ai eu les meilleurs résultats de loin avec PhantomJS. Il y a un paquet NuGet pour cela, et en le combinant avec HtmlAgilityPack, vous obtenez une bonne boîte à outils de récupération &.

Cet exemple utilise simplement les capacités d'analyse intégrées de PhantomJS. Cela a fonctionné avec une très ancienne version de la bibliothèque; comme il semble encore en cours de développement actif, on peut supposer que plus de capacités ont été ajoutées.

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

Je connais quelque chose appelé NCrawler, disponible sur codeplex. Pas utilisé personnellement, mais un collègue dit que ça fonctionne bien.

+0

NCrawler semble être une bonne solution, le test maintenant. –

0

Ncrawler ne supporte pas Javascript.But il semble très bon, et facile à utiliser la solution si vous n'avez pas besoin javascript exécution

2

arachnode.net peut traiter JavaScript.

3

Abot C# Web Crawler

description de http://code.google.com/p/abot/ dit: Abot est une open source C# web crawler construit pour la vitesse et la flexibilité. Il prend en charge la plomberie de bas niveau (multithreading, requêtes http, ordonnancement, analyse de liens, etc.). Vous n'avez qu'à vous connecter à des événements clés pour traiter des données ou ajouter vos propres implémentations d'interfaces de base pour prendre le contrôle complet du processus d'analyse.

ne l'ont pas utilisé cependant.