龙空技术网

C#基于浏览器内核的高级爬虫

静观其变Lee 170

前言:

目前小伙伴们对“ajax如何实现翻页”可能比较关注,朋友们都想要学习一些“ajax如何实现翻页”的相关文章。那么小编在网摘上收集了一些有关“ajax如何实现翻页””的相关内容,希望看官们能喜欢,看官们一起来了解一下吧!

基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构、甚至可以移除不喜欢的CSS样式。

很多网站都用Ajax动态加载、翻页,比如携程网的评论数据。如果是用之前那个简单的爬虫,是很难直接抓取到所有评论数据的,我们需要去分析那漫天的Javascript代码寻找API数据接口,还要时刻提防对方增加数据陷阱或修改API接口地。

如果通过高级爬虫,就可以完全无视这些问题,无论他们如何加密Javascript代码来隐藏API接口,最终的数据都必要呈现在网站页面上的Dom结构中,不然普通用户也就没法看到了。所以我们可以完全不分析API数据接口,直接从Dom中提取数据,甚至都不需要写那复杂的正则表达式。

主要特性支持Ajax请求事件的触发及捕获;支持异步并发抓取;支持自动事件通知;支持代理切换;支持操作Cookies;

运行截图抓取酒店数据

抓取评论数据

示例代码

 /// <summary>    /// 抓取酒店评论    /// </summary>	static void Main(string[] args)    {        var hotelUrl = ";;        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:

标签: #ajax如何实现翻页 #爬虫 浏览器内核