使用 phantomjs 异步爬取 ajax 网页数据

学习笔记 马富天 2017-06-30 16:40:34 93 0

【摘要】这几天在学习 phantomjs ,今天学习到了如何实现使用 phantomjs 爬取由 ajax 异步生成的数据,这里做个笔记。

首先,需要了解一下 ajax , ajax 是一个异步输出的技术,当普通的爬虫爬取网页的时候,发送 http 请求,而获取到的都是 http 请求后直接的响应数据,然后在网页中可能还有 ajax ,这是网页向服务器发送的异步请求数据,这是第二次 http 请求,但爬虫是获取不到的。

实际问题如下:

淘宝的某个商品链接:https://item.taobao.com/item.htm?id=545533644459

当第一次加载的是时候,并不是把所有的数据都一次性全部加载到网页中的,如图所示:

请输入图片名称

红色方框中的累计评论数和交易成功数就是使用 ajax 异步输出的。当整个网页所有的请求都加载完毕之后,数据会显示出来:

请输入图片名称

之后,当我们查看网页源代码的时候,累计评论数和交易成功数都是 "-":

请输入图片名称

本文所用的解决办法,直接上代码:

  1. var webPage = require('webpage');	//	创建一个 webpage 模块的实例
  2. var page = webPage.create();
  3. var taobaoURL = 'https://item.taobao.com/item.htm?id=545533644459';	//	淘宝某一商品的链接
  4. page.viewportSize = { width: 1440, height: 1080 };
  5. page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36";
  6. //	page.settings.loadImages = false;	//	禁止加载图片
  7. //	page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) PhantomJS/19.0";
  8. page.open(taobaoURL, function(status) 
  9. {
  10. 	if(status !== 'success') 
  11. 	{
  12.         console.log("open fail!");
  13.     }else
  14.     {
  15. 	    //	由于是拉取异步数据,我们打开页面后,等待若干秒后再去操作 dom (这里设置成 3 秒),获取累计评论
  16. 	    setTimeout(function() 
  17. 	    {
  18. 	        var result = page.evaluate(function()
  19. 	        {
  20. 	            return document.getElementById("J_RateCounter").innerText;
  21. 	        });
  22. 	        console.log('累计评论:' + result + '条');
  23.         	//	生成当前页面截图
  24.         	page.render("taobao.png");
  25. 	        phantom.exit();
  26. 	    }, 3000);
  27.     }
  28. });

执行该文件得到最后的结果:

请输入图片名称

生成的网页截图如下:

请输入图片名称

版权归 马富天PHP博客 所有

本文标题:《使用 phantomjs 异步爬取 ajax 网页数据》

本文链接地址:http://www.mafutian.net/282.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 如何在 windows 系统的 cmd 窗口中输入中文 》 下一篇《 使用 js 判断当前用户浏览的页面是 pc 端还是手机移动端 》
分享到:

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码