2010-12-05 82 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請求,調度,鏈接解析等)。您只需掛鉤關鍵事件即可處理數據或插入您自己的核心接口實現,以完全控制爬網過程。

雖然沒有使用它。