我正在构建一个购物比较引擎,我需要构建一个爬行引擎来执行日常数据收集过程。
我已经决定在C#中构建爬虫。我对HttpWebRequest/HttpWebResponse类有很多不好的体验,众所周知,它们对于大型爬虫来说是高度错误和不稳定的。因此,我决定不在它们的基础上进行构建。即使在框架4.0中,它们也是有缺陷的。
我是根据自己的亲身经历说的。
如果他们知道有什么好的开源爬虫框架,比如java有nutch和apache commons,它们是非常稳定和高度健壮的库,我想要这里的专家们的意见,他们已经编码爬虫程序。
如果C#中已经存在一些爬行框架,我将继续在它们之上构建我的应用程序。
如果没有,我计划从代码项目中扩展这个解决方案,并扩展它。
http://www.codeproject.com/KB/IP/Crawler.aspx
如果有人能给我建议一条更好的道路,我将不胜感激。
编辑:我必须抓取的一些网站使用非常复杂的Java Script呈现页面,现在这增加了我的网络爬虫的复杂性,因为我需要能够抓取由JavaScript呈现的页面。如果有人在C#中使用过任何可以抓取javascript渲染的库,请一定要分享。我用过我不喜欢的watin,我也知道有关硒的知识。如果你知道除了这些以外的任何事情,请与我和社区分享。
发布于 2015-02-12 00:36:23
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;
}
发布于 2013-03-21 05:22:20
关于C#网络爬虫
来自http://code.google.com/p/abot/的描述说: Abot是一个开源的C#网络爬虫,旨在提高速度和灵活性。它负责低级探测(多线程、http请求、调度、链接解析等)。您只需挂钩到关键事件来处理数据,或者插入您自己的核心接口实现,就可以完全控制爬行过程。
不过还没用过呢。
发布于 2010-12-06 03:43:16
我知道一个叫NCrawler的东西,可以在codeplex上使用。虽然不是个人使用,但一位同事说它工作得很好。
https://stackoverflow.com/questions/4360009
复制相似问题