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