Node.js学习之网络爬虫(使用cheerio抓取网页数据)
2017-06-19 23:05
961 查看
准备工作
1.安装node.js开发环境:http://www.runoob.com/nodejs/nodejs-install-setup.html
2.了解cheerio库
英文:https://github.com/cheeriojs/cheerio
中文:https://cnodejs.org/topic/5203a71844e76d216a727d2e
3.将目录切换到工程目录下,使用如下命令安装cheerio
Cheerio安装完成后,可以进行网页数据抓取。
这里以抓取自如友家主页上轮播图为例。
首先分析一下轮播图源代码(打开自如友家的首页,按下F12,即可找到相应的源码),如下:
我们需要获取的信息主要是
创建crawler.js文件,具体代码如下:
代码写完后,运行命令行
结果如下(网站会更新,所以数据会有变化):
参考链接:
http://www.jianshu.com/p/9d70440d2521
http://www.cnblogs.com/CraryPrimitiveMan/p/3674421.html
下面是根据慕课网Node.js教程获得的网络爬虫,有兴趣可以研究一下,代码仅供参考:
1.安装node.js开发环境:http://www.runoob.com/nodejs/nodejs-install-setup.html
2.了解cheerio库
英文:https://github.com/cheeriojs/cheerio
中文:https://cnodejs.org/topic/5203a71844e76d216a727d2e
3.将目录切换到工程目录下,使用如下命令安装cheerio
npm install cheerio
Cheerio安装完成后,可以进行网页数据抓取。
这里以抓取自如友家主页上轮播图为例。
首先分析一下轮播图源代码(打开自如友家的首页,按下F12,即可找到相应的源码),如下:
<ul id="foucsSlideList"> <li> <a href="http://www.ziroom.com/zhuanti/2017/haiyan/pc/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/06/b788435fb909da1a76642e0adf6f6909.jpg" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> 4000 </li> <li> <a href="http://zhuanti.ziroom.com/zhuanti/2017/nanjing/kc/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/06/9018bf2d9172bf1d8ce97596d33b9586.png" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> <li> <a href="http://zhuanti.ziroom.com/zhuanti/2017/zrk/zrbaitiao/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/04/b10f346f36e7bdf88c4227e0240e3fda.jpg" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> <li> <a href="http://zhuanti.ziroom.com/zhuanti/2017/haiyan/meetingReview/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/06/fc1fe40b08a9ae3bf6aa258b16eb7ba5.png" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> <li> <a href="http://zhuanti.ziroom.com/zhuanti/2017/zry/yuezu/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/05/cfa8a415fd40dde14062b999c8153eac.jpg" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> <li> <a href="http://www.ziroom.com/zhuanti/2017/yezhu/zhizu/m/index.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/03/ea1f3b6d6e80c7cc4ad1434639f401f7.jpg" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> <li> <a href="http://www.ziroom.com/z/nl/duanzu/kl.html" target="_blank"><img src="http://www.ziroom.com/static/ziroom_2016/images/none.png" _src="http://pic.ziroom.com/static/upload/cms/2017/04/9b49a02a370b624fe49e3d39a6213998.jpg" alt="北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】" ></a> </li> </ul>
我们需要获取的信息主要是
<li>标签中子标签
<a>的href属性值,以及子标签
<img>的_src和alt属性值。明确要获取的数据就动手吧。
创建crawler.js文件,具体代码如下:
// 加载http模块 var http = require('http'); // Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构,然后提供像jquery一样的css选择器查询 var cheerio = require('cheerio'); // 定义网络爬虫的目标地址:自如友家的主页 var url = 'http://www.ziroom.com/'; http.get(url, function(res) { var html = ''; // 获取页面数据 res.on('data', function(data) { html += data; }); // 数据获取结束 res.on('end', function() { // 通过过滤页面信息获取实际需求的轮播图信息 var slideListData = filterSlideList(html); // 打印信息 printInfo(slideListData); }); }).on('error', function() { console.log('获取数据出错!'); }); /* 过滤页面信息 */ function filterSlideList(html) { if (html) { // 沿用JQuery风格,定义$ var $ = cheerio.load(html); // 根据id获取轮播图列表信息 var slideList = $('#foucsSlideList'); // 轮播图数据 var slideListData = []; /* 轮播图列表信息遍历 */ slideList.find('li').each(function(item) { var pic = $(this); // 找到a标签并获取href属性 var pic_href = pic.find('a').attr('href'); // 找到a标签的子标签img并获取_src var pic_src = pic.find('a').children('img').attr('_src'); // 找到a标签的子标签img并获取alt var pic_message = pic.find('a').children('img').attr('alt'); // 向数组插入数据 slideListData.push({ pic_href : pic_href, pic_message : pic_message, pic_src : pic_src }); }); // 返回轮播图列表信息 return slideListData; } else { console.log('无数据传入!'); } } /* 打印信息 */ function printInfo(slideListData) { // 计数 var count = 0; // 遍历信息列表 slideListData.forEach(function(item) { // 获取图片 var pic_src = item.pic_src; // 获取图片对应的链接地址 var pic_href = item.pic_href; // 获取图片信息 var pic_message = item.pic_message; // 打印信息 console.log('第' + (++count) + '个轮播图'); console.log(pic_message); console.log(pic_href); console.log(pic_src); console.log('\n'); }); }
代码写完后,运行命令行
node crawler.js
结果如下(网站会更新,所以数据会有变化):
第1个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://www.ziroom.com/zhuanti/2017/haiyan/pc/index.html http://pic.ziroom.com/static/upload/cms/2017/06/b788435fb909da1a76642e0adf6f6909.jpg 第2个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://zhuanti.ziroom.com/zhuanti/2017/nanjing/kc/index.html http://pic.ziroom.com/static/upload/cms/2017/06/9018bf2d9172bf1d8ce97596d33b9586.png 第3个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://zhuanti.ziroom.com/zhuanti/2017/zrk/zrbaitiao/index.html http://pic.ziroom.com/static/upload/cms/2017/04/b10f346f36e7bdf88c4227e0240e3fda.jpg 第4个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://zhuanti.ziroom.com/zhuanti/2017/haiyan/meetingReview/index.html http://pic.ziroom.com/static/upload/cms/2017/06/fc1fe40b08a9ae3bf6aa258b16eb7ba5.png 第5个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://zhuanti.ziroom.com/zhuanti/2017/zry/yuezu/index.html http://pic.ziroom.com/static/upload/cms/2017/05/cfa8a415fd40dde14062b999c8153eac.jpg 第6个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://www.ziroom.com/zhuanti/2017/yezhu/zhizu/m/index.html http://pic.ziroom.com/static/upload/cms/2017/03/ea1f3b6d6e80c7cc4ad1434639f401f7.jpg 第7个轮播图 北京租房,北京白领公寓合租|出租,100%实景拍摄【自如网】 http://www.ziroom.com/z/nl/duanzu/kl.html http://pic.ziroom.com/static/upload/cms/2017/04/9b49a02a370b624fe49e3d39a6213998.jpg
参考链接:
http://www.jianshu.com/p/9d70440d2521
http://www.cnblogs.com/CraryPrimitiveMan/p/3674421.html
下面是根据慕课网Node.js教程获得的网络爬虫,有兴趣可以研究一下,代码仅供参考:
// 加载http模块 var http = require('http'); // Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构,然后提供像jquery一样的css选择器查询 var cheerio = require('cheerio'); // 定义爬虫的目标地址 var url = 'http://www.imooc.com/learn/348'; http.get(url, function(res) { var html = ''; // 获取页面数据 res.on('data', function(data) { html += data; }); // 数据获取结束 res.on('end', function() { // 通过过滤章节信息获取实际需求的课程信息 var courseData = filterChapters(html); // 打印课程信息 printC c481 ourseInfo(courseData); }); }).on('error', function() { console.log('获取数据出错!'); }); /* 过滤章节信息 */ function filterChapters(html) { // 沿用JQuery风格 var $ = cheerio.load(html); // 通过类名获取章节信息 var chapters = $('.chapter'); // 课程数据,该数据是一个数组 var courseData = []; /* 章节信息遍历 */ chapters.each(function(item) { // 获取单独的每一章 var chapter = $(this); // 获取strong标签里面的文本,trim()去除空格,split()分隔成数组,最终只获取章节标题 var chapterTitle = chapter.find('strong').text().trim().split('\n')[0]; // 获取video标签下的子标签li的内容 var videos = chapter.find('.video').children('li'); // 定义章节数据 var chapterData = { chapterTitle : chapterTitle, videos : [] }; /* 视频信息遍历 */ videos.each(function(item) { // 通过标签的类名来获取单独的视频信息 var video = $(this).find('.J-media-item'); // 视频标题 var videoTitle = video.text().trim().split('\n')[0].trim(); // 视频时长 var videoTime = video.text().trim().split('\n')[1].trim(); // 视频编号 var id = String(video.attr('href')).split('video/')[1]; // 填充章节信息中视频数组 chapterData.videos.push({ title : videoTitle, time : videoTime, id : id }); }); // 填充课程信息中的章节信息 courseData.push(chapterData); }); // 返回课程信息 return courseData; } /* 打印课程信息 */ function printCourseInfo(courseData) { // 遍历课程信息 courseData.forEach(function(item) { // 获取章节标题 var chapterTitle = item.chapterTitle; // 打印章节标题并换行 console.log(chapterTitle + '\n'); // 遍历每个章节中的视频信息并打印 item.videos.forEach(function(video) { console.log(' [' + video.id + '] ' + video.title + ' ' + video.time + '\n'); }); }); }
相关文章推荐
- Node.js的学习--使用cheerio抓取网页数据
- 使用node.js cheerio抓取网页数据
- node.js 学习笔记003 :使用superagent和cheerio实现简单网页爬虫
- 使用node.js cheerio抓取网页数据
- 使用node.js cheerio抓取网页数据
- node.js 小爬虫抓取网页数据
- node.js 小爬虫抓取网页数据(2)
- node.js使用cheerio制作网络爬虫
- 网络爬虫之php抓取json,xml,js,html示例分析及数据解析
- 萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + css selector 抓取自己想要网页内容
- Node.js爬虫数据抓取乱码问题总结
- Node.js 网页爬虫再进阶,cheerio助力
- 网页爬虫抓取js动态渲染数据
- 萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + css selector 抓取动态网页内容:Knewone
- Node.js 利用cheerio制作简单的网页爬虫示例
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
- python3实现网络爬虫(7)-- 使用ip代理抓取网页
- iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据
- node.js抓取数据(fake小爬虫)