c#抓取网页数据(基于C#.NET+PhantomJS的高级网络爬虫程序程序 )

优采云 发布时间: 2022-02-13 19:18

  c#抓取网页数据(基于C#.NET+PhantomJS的高级网络爬虫程序程序

)

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

  很多网站使用Ajax来动态加载和翻页,比如携程的评论数据。如果我们之前使用简单的爬虫,很难直接抓取所有的评论数据。我们需要分析天上的Javascript代码才能找到API数据接口,时刻提防对方添加数据陷阱或修改API接口。

  如果通过高级爬虫,完全可以忽略这些问题。不管他们如何加密Javascript代码来隐藏API接口,最终的数据都必须在网站页面的Dom结构中呈现出来,否则普通用户是看不到的。到达。所以我们可以直接从 Dom 中提取数据,根本不用分析 API 数据接口,甚至不用写那个复杂的正则表达式。

  主要特点

  运行截图

  示例代码

   ///

/// 抓取酒店评论

///

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线