Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

chaomaogithub/node-crawl

Repository files navigation

使用nodejs做爬虫已经有一段时间了,利用爬虫技术,期间共做了3个网站
 |-- 361搜索
 |-- 功能: 利用360搜索、爱电影网、百度网盘、虫虫钢琴网、旗米拉网、虾米网等网站现有的功能,
 帮助用户快速获得下载资源。
 |-- 网址: http://114.215.159.50:7001/
 |-- git库: https://github.com/tsq/361so
 |-- 爱虾米
 |-- 功用: 利用虾米网提供的api,提供搜索并获取艺人档案、评论、歌曲、专辑、图片等信息,
 |-- 网址: http://114.215.159.50:1400/index.html
 |-- git库: https://github.com/tsq/xiami
 |-- 美女图库
 |-- 功能: 看美女,免去原有网站一页只能看一张的纠结!
 |-- 网址: http://114.215.159.50:2014/
 |-- git库: https://github.com/tsq/girl-gallery
下面是自己的一些总结和心得体会
 |-- 利用爬虫我们能够做什么?
 |-- 获取别的网站现有的api
 |-- 例如自己的361搜索网站中的,当你输入时,跳出的搜索建议,就是来自360搜索的api。
 |-- 对网站功能进行个性化重构
 |-- 例如自己的爱虾米、美女图库。都是对原有网站的重构,即数据来源于你,但是,布局
 我自己来呈现。
 |-- 爬虫需要哪些技术?
 |-- cheerio模块
 |-- 理由: 爬虫最关键的就是网页dom的分析,数据的提取,而cheerio,这个类似服务端版本的
 jquery可以帮我们快速轻松的完成任务。
 |-- 英文官网: http://matthewmueller.github.io/cheerio/
 |-- api中文翻译: http://cnodejs.org/topic/5203a71844e76d216a727d2e
 |-- git库地址: http://matthewmueller.github.io/cheerio/
 |-- request模块
 |-- 理由: request模块对http的各种请求都做了很好的封装,在做http请求时,可以很容易
 的获取请求数据,甚至支持cookie的传输。自己之前利用request做过一个restful
 请求发送的网站: https://github.com/tsq/restful ,可以发现request的功能是
 多么的强大。
 |-- git库地址: https://github.com/mikeal/request
 |-- 字符串的处理
 |-- 爬来的数据,大多情况下是一大堆字符串,因此如何获得自己想要的那部分字符串就需要熟悉
 js中对字符串的处理,如 substring、indexOf、lastIndexOf、replace等等。
 |-- 前端怎么办?
 |-- 爬虫代码一般放在服务端,因此我们还需要前端技能,在前端把从服务端获得的数据正确的展示。
 至于页面布局展示,如果你不想自己写css可以去:https://wrapbootstrap.com/ 选择一个,
 js框架可以使用jquery、angular等等。
爬虫实战demo
 |-- demo就是本项目'mm',这个项目是在做美女图库时的测试代码,演示了如何获取想要的数据。
 下面会以suren.js为例,分析如何获取数据。你可以对照着suren.js中的代码看下面的说明。
 |—— demo最后被集成的效果是: http://114.215.159.50:2014/
 |-- suren.js源码分析
 |-- 作用: 获取 ‘http://www.22mm.cc/mm/suren/’页面中所有的图片的src、href、title
 |-- 第一步: 引入request、cheerio、qs模块
 |-- 第二步: var url = 'http://www.22mm.cc/mm/suren/';
 request(url).pipe((fs.createWriteStream('suren.html')));
 通过request将这个页面先下载到本地,进行dom分析,分析前,最好用编辑器将这个html
 代码格式化一下。这样比较方便分析dom结构。
 |-- 第三步: 数据分析
 |-- 我们想要的src、href、title等数据都是存放在li标签中,li中a便签包含了href和
 title。li中img标签包含了图片的src。
 |-- 第四步: 数据获取
 |-- 获取整个html文档,这个html页面都被包装在$对象中了
 request(url, function (error, res, body) {
 if (!error && res.statusCode == 200) {
 var $ = cheerio.load(body);
 }}
 |-- 获取所有的li元素: var li = $('li');
 |-- 遍历li数组: li.each(function (index, ele) {})
 |-- 获取当前li中的title、src、href数据:
 var text = $(this).text();
 var src = $('img', this).attr('src');
 var href = $('a', this).attr('href');
 |-- 将数据封装成一个对象,并存在数组中:
 var obj = {
 src: src,
 href: 'http://www.22mm.cc' + href,
 text: text
 };
 arr.push(obj);
 |-- 第五步: 测试结果:
 |-- 项目根目录下: node suren.js 你将看到:
 arr: [ { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-4/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaeaiHdaPPHmdi.html',
 text: '花样年华' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-18/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJPeeibJJaCaaPH.html',
 text: '迷雾 森林' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-8/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaeJiPeeaddeHa.html',
 text: '我喜欢你是安静的' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-9/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCabiamdaCaaib.html',
 text: '那年夏天' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-6/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCaCiaPedaHiiaH.html',
 text: '公交站台' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-5-29/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiamdbJmiPmaiPJdd.html',
 text: '竹边' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-5-23/1/s0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiamdHPeaHCamHJdi.html',
 text: '秀气清纯妹妹kik...' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-15/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaePmdeCaPammbaJ.html',
 text: '兔蜜旅行' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-13/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaePHmJPeiaHidiJ.html',
 text: '夏' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-12/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaePddbePamadid.html',
 text: '随意乐呵乐呵' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-11/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaePPPJeJiammdmC.html',
 text: '8月咖啡' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-8/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaeaeHbPbJammbPm.html',
 text: 'Miya,初秋' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-7/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaeaJHHJbdaiHbPe.html',
 text: '瞳-微凉的你' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-5/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaeamJdaJJaiHePe.html',
 text: '夏の逆光' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-8-4/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaeaiHdaPPHmdi.html',
 text: '花样年华' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-31/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJHPiPeaHammmmb.html',
 text: '那年青春' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-30/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJHaeJbdmammidm.html',
 text: '户外街拍校花性感...' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-29/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJdbiibHiamimaC.html',
 text: '午後微藍' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-24/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJdimCHHbamPdie.html',
 text: '时尚百变美女吕妍...' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-23/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJdHmiCePaHaHm.html',
 text: '清纯校花公园迷人...' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-21/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJdPbHPbmamHamJ.html',
 text: '昙华林贰拾壹号' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-18/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJPeeibJJaCaaPH.html',
 text: '迷雾 森林' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-16/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJPCibmCPaimiaa.html',
 text: '樱花树下' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-11/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJPPHmHidaCaadm.html',
 text: '等待秋天' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-10/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJPaeeCHaamaJdi.html',
 text: '安静的时光' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-8/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaeJiPeeaddeHa.html',
 text: '我喜欢你是安静的' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-8/2/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaeeJPCdaddeHa.html',
 text: '浪漫樱花' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-3/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaHeaeiiaiamPH.html',
 text: '夏花瘾' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-2/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaddeiJCamimib.html',
 text: 'piko' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-7-1/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaJaPPHCdHamiJim.html',
 text: '一绺青丝' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-30/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCHadJaHdmiH.html',
 text: '微醺初夏' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-26/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCdCJbdeeaimdid.html',
 text: '邻家清纯MM沈乔乔...' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-25/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCdmmabHiamHiiH.html',
 text: 'leisure time' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-23/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCdHeHCdeamPeid.html',
 text: '瞳-简单' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-19/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCPbCJdmdammmPC.html',
 text: '秘密花园' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-17/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCPJdHHHHaHPCda.html',
 text: '马路少女' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-13/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCPHdCJPeadHJHC.html',
 text: '明若朝曦' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-11/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCPPdaamamdaPb.html',
 text: '春天里' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-9/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCabiamdaCaaib.html',
 text: '那年夏天' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-6-6/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiaCaCiaPedaHiiaH.html',
 text: '公交站台' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-5-30/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiamHaCCPaPaCamiC.html',
 text: '森林の少女' },
 { src: 'http://srimg1.meimei22.com/pic/suren/2014-5-29/1/0.jpg',
 href: 'http://www.22mm.cc/mm/suren/PiamdbJmiPmaiPJdd.html',
 text: '竹边' } ]
 |-- 集成在服务端中
 |-- 使用你自己喜欢的服务端框架将功能集成到api中,在这里我使用的sails框架,所以最后
 api集成的结果就是:
 https://github.com/tsq/girl-gallery/blob/master/api/controllers/PicController.js
 |-- 本项目其他js的说明:
 |-- suren-detail.js
 |-- 获取http://www.22mm.cc/网站美女大图的src
 |-- umei.js
 |-- 获取http://www.umei.cc/网站首页的图片的src
 |-- umei-detail.js
 |-- 获取http://www.umei.cc/网站美女大图的src
 |-- umei-detail-download.js
 |-- 下载http://www.umei.cc/网站美女大图到本地
 |-- 和http://www.22mm.cc/不同的是http://www.umei.cc/网在请求图片数据的时候会检查
 http header中的 Referer,所以要特殊处理。而不能直接在浏览器中输入图片的url
 |-- 用node分别执行一下这几个js看看吧。特别是umei-detail-download.js,执行完后你将看到
 一张高清美女图。
 |-- 其它感悟
 |-- 编码的处理:
 |-- 有很多网站并非采用utf-8编码,所以爬来的数据可能是乱码,需要进行一些处理。
 '361搜索'工程中就有很多类似的处理。
 |-- 字符串的处理
 |-- 爬虫过程中经常需要进行对字符串进行处理,需要掌握好js中对字符串的处理,
 例如‘美女图库’项目中大图的获取,获取的图片src中,该网站故意将'pic'换成了'big',
 因此需要自己处理一下。		

About

nodejs项目--爬虫总结及实战demo [Game] http://pretty-girl.top/#/game 😍 [Gallery]

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • HTML 97.0%
  • JavaScript 3.0%

AltStyle によって変換されたページ (->オリジナル) /