说到爬虫其实并没有想象中那么复杂,原理就是向目标URL发送请求然后把响应解析成我们想要的数据格式,如果涉及Token鉴权则比较复杂一点,本次只讲解最简单的入门静态爬虫。 node.js中实现爬虫推荐两个库,request和cheerio ``` npm install request npm install cheerio ``` request用来发送请求;cheerio则是jquery核心功能的快速简洁灵活的实现,可以直接对request请求返回的页面html进行jquery式的dom操作。 #### (一)dom爬取 下面给一个最简单的爬虫例子,我们爬取简书我的主页的用户名 1. 打开要爬取的页面并要找到用户名的dom节点 ![13653457-d4221adec40720b2](https://peal.cc/static/image/16082137395049832.jpeg) 2. 按照jquery的选择器写法获取,这里应该是`$('.main-top>.title>a').text()` 附上代码 ``` const request = require('request') const cheerio = require('cheerio') request('https://www.jianshu.com/u/5b23cf5114a1', (err, res) => { if (err) { console.log(err.code) } else { let $ = cheerio.load(res.body) console.log($('.main-top>.title>a').text()) } }) ``` ![13653457-11f04676fe47de0f](https://peal.cc/static/image/16082137829261182.jpeg) #### (二)列表爬取 如果要爬取一个列表,例如我的简书Blog列表,那该怎么实现呢,同理,使用jquery的`each`方法,该方法会对选择器内的匹配dom进行遍历。按照同样的步骤先找到dom节点再进行解析。 附上参考代码 ``` const request = require('request') const cheerio = require('cheerio') request('https://www.jianshu.com/u/5b23cf5114a1', (err, res) => { if (err) { console.log(err.code) } else { let $ = cheerio.load(res.body) let data = [] $('.note-list>li').each(function (i) { data.push($(this).find('.title').text()); }); console.log(data) } }) ``` ![13653457-253527c03d985474](https://peal.cc/static/image/16082138256989292.jpeg) 静态爬虫到此结束了,后面还会讲解动态网页的爬取。

node.js爬虫入门(一)爬取静态页面

1070 23 nodeJs 2020-04-14