本文适合有无爬虫和Node.js基础的朋友~要求:使用Node.js爬取网页资源,开箱即用如果你是技术人员,可以看下我的文章,否则请直接移步我的github仓库,看文档就用吧地址:附上文档和源码,别忘了给astar本次需求用到的技术:Node.js和puppeteerPuppeteer官网地址:puppeteer地址Node.js官网地址:链接说明Puppeteer是Google官方产品,通过DevTools协议控制headlessChrome的一个Node库。您可以通过Puppeteer提供的API直接控制Chrome,模拟大部分用户操作进行UITest或者作为爬虫访问页面进行数据采集。环境与安装Puppeteer本身依赖于Node6.4以上版本,但是对于超级好用的async/await,建议使用Node7.6以上版本。另外,headlessChrome本身对服务端所依赖的库的版本要求比较高。centos服务器依赖比较稳定。很难在v6中使用无头Chrome。升级依赖版本可能会导致各种服务器问题(包括但不限于无法使用ssh),***使用更高版本的服务器。(建议使用最新版本的Node.js)小测试,爬取京东资源constpuppeteer=require('puppeteer');//引入依赖(async()=>{//使用async函数***异步constbrowser=awaitpuppeteer.launch();//打开一个新的浏览器constpage=awaitbrowser.newPage();//打开一个新的网页awaitpage.goto('https://www.jd.com/');//转到it'url'网页constresult=awaitpage.evaluate(()=>{//这个result数组包含了所有的图片src地址letarr=[];//这个箭头函数里面写处理的逻辑constimgs=document.querySelectorAll('img');imgs.forEach(function(item){arr.push(item.src)})returnarr});//'此时的结果就是获取到的爬虫数据,可以通过'fs保存'module'})()复制过去,使用命令行命令`节点文件名`运行获取爬虫数据。这个puppeteer包其实是给我们打开了另外一个浏览器,重新打开网页,拿到了他们的数据。以上只爬取了京东首页的图片内容。假设我的需求进一步扩展,我需要爬取京东首页所有标签对应的跳转页面中所有标题的所有文字内容,最后放到一个数组中间。我们的async函数分为五步,只有puppeteer.launch()、browser.newPage()、browser.close()是固定的。page.goto指定我们去哪个网页爬取数据,可以更改内部url地址,也可以多次调用该方法。page.evaluate这个函数内部处理了我们要爬取到网页的数据逻辑page.goto和page.evaluate。async内部可以调用多次,也就是说我们可以先进入京东网页,处理逻辑。最后,再次调用page.goto函数。注意上面所有的逻辑都是puppeteer包帮我们在看不见的地方打开另一个浏览器,然后处理逻辑,所以最后调用browser.close()方法关闭那个浏览器。这个时候我们优化上篇文章的代码,爬取对应的资源。constpuppeteer=require('puppeteer');(async()=>{constbrowser=awaitpuppeteer.launch();constpage=awaitbrowser.newPage();awaitpage.goto('https://www.jd.com/');consthrefArr=awaitpage.evaluate(()=>{letarr=[];constaNodes=document.querySelectorAll('.cate_menu_lk');aNodes.forEach(函数(item){arr.push(item.href)})returnarr});letarr=[];for(leti=0;i
