基于C#的高级网络爬虫。NET+PhantomJS+Sellenium。您可以执行Javascript代码,触发各种事件,操纵页面的Dom结构,甚至删除不需要的CSS样式。
很多网站使用Ajax动态加载和翻页,比如携程的评论数据。如果使用以前的简单爬虫,很难直接抓取所有评论数据。我们需要分析无边无际的Javascript代码来寻找API数据接口,要时刻提防对方添加数据陷阱或者修改API接口。
如果高级爬虫可以完全忽略这些问题,无论他们如何加密Javascript代码隐藏API接口,最终的数据都必须以Dom结构呈现在网站页面上,否则普通用户是看不到的。所以我们完全不需要分析API数据接口,甚至不需要编写复杂的正则表达式,就可以直接从Dom中提取数据。
主要特性
支持Ajax请求事件的触发及捕获;支持异步并发抓取;支持自动事件通知;支持代理切换;支持操作Cookies;
运行截图
抓取酒店数据抓取评论数据
示例代码
/// <sum***ry> /// 抓取酒店评论 /// </sum***ry>static void Main(string[] args) { var hotelUrl = "http://hotels.ctrip.com/hotel/434938.html"; var hotelCrawler = new StrongCrawler(); hotelCrawler.OnStart += (s, e) => { Console.WriteLine("爬虫开始抓取地址:" + e.Uri.ToString()); }; hotelCrawler.OnError += (s, e) => { Console.WriteLine("爬虫抓取出现错误:" + e.Uri.ToString() + ",异常消息:" + e.Exception.ToString()); }; hotelCrawler.OnCompleted += (s, e) => { HotelCrawler(e); }; var operation = new Operation { Action = (x) => { //通过Selenium驱动点击页面的“酒店评论” x.FindElement(By.XPath("//*[@id='commentTab']")).Click(); }, Condition = (x) => { //判断Ajax评论内容是否已经加载成功 return x.FindElement(By.XPath("//*[@id='commentList']")).Displayed && x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Displayed && !x.FindElement(By.XPath("//*[@id='hotel_info_comment']/div[@id='commentList']")).Text.Contains("点评载入中"); }, Timeout = 5000 }; hotelCrawler.Start(new Uri(hotelUrl), null, operation);//不操作JS先将参数设置为NULL Console.ReadKey(); }github:https://github.com/microfisher/Strong-Web-Crawler
本文来自是我太自作多情投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/536442.html