2010-12-05 83 views
9

Iam构建购物比较引擎,我需要构建一个爬行引擎来执行日常数据收集过程。C#中的任何良好的开源Web爬网框架#

我决定在C#中构建爬网程序。我对HttpWebRequest/HttpWebResponse类有很多不好的经验,并且他们被称为是高度bug并且对于大型爬行不稳定。所以我决定不建立在他们身上。即使在框架4.0中,它们也是越野车。

我以自己的亲身经历说话。

如果他们知道任何优秀的开源爬虫框架,比如java有nutch和apache commons这些非常稳定和高度健壮的库,我希望这里的专家们一直在编码爬虫。

如果在C#中有一些已经存在的爬行框架,我会继续前进,并在他们之上构建我的应用程序。

如果不打算从代码项目扩展此解决方案并将其扩展。

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

如果任何人可以建议我一个更好的路径,我就真的很感谢。

编辑:我必须爬网的一些网站使用非常复杂的Java脚本呈现网页,现在这为我的网页爬虫增加了更多的复杂性,因为我需要能够抓取JavaScript呈现的网页。如果有人在C#中使用了可以抓取JavaScript呈现的任何库,请分享。我使用了我不喜欢的watin,我也知道硒。如果您了解除此之外的任何内容,请与我和社区分享。

+9

HttpWebRequest越野车是怎么样的? – SLaks 2010-12-05 17:09:19

+0

'SELECT'未被破坏。 – neo2862 2010-12-05 17:11:10

回答

3

PhantomJS + HtmlAgilityPack

我知道这个题目是有点老了,但我目前与PhantomJS有最好的结果。它有一个NuGet包,并且将它与HtmlAgilityPack结合起来可以很好地抓取&抓取工具包。

本示例仅使用PhantomJS内置的解析功能。这与图书馆的一个非常旧的版本一起工作;因为它似乎还处于积极的发展阶段,所以假设已经增加了更多的功能是安全的。

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

我知道一些叫做NCrawler的东西,可以在codeplex上找到。不是亲自使用它,而是一位同事说它工作正常。

0

Ncrawler不支持Javascript.But它看起来非常好,且易于使用的解决方案,如果你并不需要JavaScript执行

2

arachnode.net可以处理JavaScript的。

3

先贤篇C#网络爬虫

说明从http://code.google.com/p/abot/说: 先贤篇是速度和灵活性内置一个开源的C#网络爬虫。它负责处理低级管道(多线程,http请求,调度,链接解析等)。您只需挂钩关键事件即可处理数据或插入您自己的核心接口实现,以完全控制爬网过程。

虽然没有使用它。