我建立了一个购物比较引擎,我需要构建一个爬行引擎来执行每日数据收集过程。
我决定用C#构建爬虫。我对HttpWebRequest / HttpWebResponse类有很多不好的经验,并且它们对于大型爬行来说是非常错误和不稳定的。所以我决定不以它们为基础。即使在框架4.0中,它们也是错误的。
我以自己的亲身经历说话。
如果他们知道任何优秀的开源抓取框架,比如java有nutch和apache commons这些非常稳定且非常强大的库,我希望来自这里编写爬虫代码的专家的意见。
如果C#中已存在一些已存在的爬网框架,我将继续在其上构建我的应用程序。
如果没有计划从代码项目扩展此解决方案并扩展它。
http://www.codeproject.com/KB/IP/Crawler.aspx
如果有人能建议我走得更好,我会非常感激。
编辑:我必须抓取的一些网站使用非常复杂的Java脚本渲染页面,现在这增加了我的网络抓取工具的复杂性,因为我需要能够抓取JavaScript呈现的页面。如果有人在C#中使用了任何可以抓取javascript的库,请分享。我使用过watin,我不喜欢,我也知道硒。如果您了解除此之外的任何事情,请与我和社区分享。答案 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,也很容易使用解决方案