C#中任何优秀的开源Web爬网框架

时间:2010-12-05 17:04:49

标签: c# screen-scraping web-crawler web-scraping

我建立了一个购物比较引擎,我需要构建一个爬行引擎来执行每日数据收集过程。

我决定用C#构建爬虫。我对HttpWebRequest / HttpWebResponse类有很多不好的经验,并且它们对于大型爬行来说是非常错误和不稳定的。所以我决定不以它们为基础。即使在框架4.0中,它们也是错误的。

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

如果他们知道任何优秀的开源抓取框架,比如java有nutch和apache commons这些非常稳定且非常强大的库,我希望来自这里编写爬虫代码的专家的意见。

如果C#中已存在一些已存在的爬网框架,我将继续在其上构建我的应用程序。

如果没有计划从代码项目扩展此解决方案并扩展它。

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

如果有人能建议我走得更好,我会非常感激。

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

5 个答案:

答案 0 :(得分:3)

Abot C#Web Crawler

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

虽然没有使用它。

答案 1 :(得分: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 :(得分:2)

我知道一些名为NCrawler的东西,可以在codeplex上找到。没有亲自使用它,但是一位同事说它运作正常。

答案 3 :(得分:2)

arachnode.net可以处理JavaScript。

答案 4 :(得分:0)

Ncrawler不支持Javascript.But它看起来非常好,如果你不需要执行javascript,也很容易使用解决方案