Sum*_*osh 9 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,我不喜欢,我也知道硒.如果您了解除此之外的任何事情,请与我和社区分享.
PhantomJS + Html敏捷包
\n\n我知道这个主题有点老了,但到目前为止我使用PhantomJS得到了最好的结果。有一个NuGet包,将它与 HtmlAgilityPack 结合起来可以形成一个相当不错的获取和抓取工具包。
\n\n此示例仅使用 PhantomJS 的内置解析功能。这适用于该库的非常旧的版本;由于它似乎仍在积极开发中,因此可以安全地假设已经添加了更多功能。
\n\nvoid Test()\n{\n var linkText = @"Help Spread DuckDuckGo!";\n Console.WriteLine(GetHyperlinkUrl("duckduckgo.com", linkText));\n // as of right now, this would print \xe2\x80\x98https://duckduckgo.com/spread\xe2\x80\x99\n}\n\n/// <summary>\n/// Loads pageUrl, finds a hyperlink containing searchLinkText, returns\n/// its URL if found, otherwise an empty string.\n/// </summary>\npublic string GetHyperlinkUrl(string pageUrl, string searchLinkText)\n{\n using (IWebDriver phantom = new PhantomJSDriver())\n {\n phantom.Navigate.GoToUrl(pageUrl);\n var link = phantom.FindElement(By.PartialLinkText(searchLinkText));\n if(link != null)\n return link.GetAttribute("href");\n }\n return string.Empty;\n}\n
Run Code Online (Sandbox Code Playgroud)\n