使用 phantomjs 异步爬取 ajax 网页数据
来源:互联网 发布:电子相册制作软件知乎 编辑:程序博客网 时间:2024/05/18 11:49
【摘要】这几天在学习 phantomjs ,今天学习到了如何实现使用 phantomjs 爬取由 ajax 异步生成的数据,这里做个笔记。
首先,需要了解一下 ajax , ajax 是一个异步输出的技术,当普通的爬虫爬取网页的时候,发送 http 请求,而获取到的都是 http 请求后直接的响应数据,然后在网页中可能还有 ajax ,这是网页向服务器发送的异步请求数据,这是第二次 http 请求,但爬虫是获取不到的。
实际问题如下:
淘宝的某个商品链接:https://item.taobao.com/item.htm?id=545533644459
当第一次加载的是时候,并不是把所有的数据都一次性全部加载到网页中的,如图所示:
红色方框中的累计评论数和交易成功数就是使用 ajax 异步输出的。当整个网页所有的请求都加载完毕之后,数据会显示出来:
之后,当我们查看网页源代码的时候,累计评论数和交易成功数都是 "-":
本文所用的解决办法,直接上代码:
var webPage = require('webpage');//创建一个 webpage 模块的实例
var page = webPage.create();
var taobaoURL = 'https://item.taobao.com/item.htm?id=545533644459';//淘宝某一商品的链接
page.viewportSize = { width: 1440, height: 1080 };
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";
//page.settings.loadImages = false;//禁止加载图片
//page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) PhantomJS/19.0";
page.open(taobaoURL, function(status)
{
if(status !== 'success')
{
console.log("open fail!");
}else
{
//由于是拉取异步数据,我们打开页面后,等待若干秒后再去操作 dom (这里设置成 3 秒),获取累计评论
setTimeout(function()
{
var result = page.evaluate(function()
{
return document.getElementById("J_RateCounter").innerText;
});
console.log('累计评论:' + result + '条');
//生成当前页面截图
page.render("taobao.png");
phantom.exit();
}, 3000);
}
});
执行该文件得到最后的结果:
生成的网页截图如下:
阅读全文
0 0
- 使用 phantomjs 异步爬取 ajax 网页数据
- Scrapy+phantomjs爬取动态网页数据
- 使用phantomjs+java 爬取AJAX页面
- Java实现爬取网页数据:PhantomJS+Webdriver
- Node.js 动态网页爬取 PhantomJS 使用入门
- selenium+ phantomjs实现动态网页爬取
- selenium+ Phantomjs爬取动态网页
- 爬虫phantomjs爬取网页中文乱码
- phantomjs实例爬取AJAX页面
- python+selenium+PhantomJS抓取ajax动态网页数据
- 爬取Ajax网页
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
- 基于Python3的phantomJs+Selenium动态网页爬取技术
- python+selenium+PhantomJS爬取网页动态加载内容
- python3 scrapy 使用PhantomJS作为middlewares爬取动态加载的数据
- Ajax异步取数据,下拉框联动
- Ajax异步从后台取Json数据
- Python中使用PhantomJS抓取Javascript网页数据
- WiredTiger存储引擎分析
- jvm参数详解
- linux下mysql的root密码忘记解决方
- 在ubuntu中安装单机Hadoop(三)
- 坑爹的Android Ble问题记录日志
- 使用 phantomjs 异步爬取 ajax 网页数据
- Lintcode:尾部的零
- PyTorch学习总结(二)——基于torch.utils.ffi的自定义C扩展
- Linux下swoole环境搭建
- Linux如何查看当前占用CPU或内存最多的几个进程
- 关于WEBSERVICE的Connection reset异常
- 小学奥数思维训练题(十一)
- 目标检测标注工具labelImg使用方法
- spring-boot 学习之路