Node爬虫篇
hi hi~最近爬虫这个词越来越常见所以萌芽打算大概的来了解一下!爬虫通俗点来讲其实就是把页面上的数据下载下来然后通过正则表达式进行筛选,塞选出来的内容存入数据库 就是整个流程啦!比如我们平常做一些demo没有数据怎么办?这个时候就可以用爬虫爬取到数据填充我们的页面~是不是感觉很棒?让我们一起来学习吧~大概分为以下几个步骤【阅读之前最起码要有一些node基础哦!】
- 引入cheerio
- 爬取页面内容
- 将内容进行过滤
1. 引入cheerio
这里萌芽向大家推荐一款叫做 cheerio 的工具!cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方。能让我们像使用jQ一样灵活的进行dom操作!官网:https://cheerio.js.org/
npm install cheerio
使用起来也很方便,对前端的小伙伴们非常友好!
//引入插件
const cheerio = require('cheerio')
//获取html内容并且将内容扔给一个 $ 符号
const $ = cheerio.load('<h2 class="title">Hello world</h2>')
//使用方法
$('h2.title').text('Hello there!')
$('h2').addClass('welcome')
console.log($.html())
console.log($('.title').html())
2. 爬取页面内容
讲了cheerio的基本使用接下来进入正题!首先让我们选择一个页面给他扒下来~这里萌芽随便在网上搜了个新闻页面做练习,侵权的话可以删掉实在找不到别的了,网站地址:http://news.sciencenet.cn/ 【使用http的request中的get方法来获取页面!】
const http = require('http');
//随便找了个新闻网站
http.get('http://news.sciencenet.cn/', function (res) {
//接收内容
let data = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
//加载完毕后获取内容
console.log(data)
});
});
3. 将内容进行过滤
这个时候我们已经可以拿到整个页面啦!但是现在的数据看起来还非常的乱,我们只需要其中一部分我们需要的数据就可以啦!
这个时候就可以使用我们的 cheerio 来进行页面过滤了!如果跳过第一步的小伙伴可以尝试自己写正则玩,这里萌芽就不演示了以后有时间再说啦~既然有现成的工具还是开箱即用最爽啦www
const http = require('http'),
cheerio = require('cheerio');//引入cheerio
//随便找了个新闻网站
http.get('http://news.sciencenet.cn/', function (res) {
//接收内容
let data = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
data += chunk;
});
res.on('end', function () {
//加载完毕后获取内容
let title = getTitle(data)
console.log(title)
});
});
/**
* 过滤标题内容
* @param {爬取内容} html
*/
function getTitle(html) {
let $ = cheerio.load(html),
arr = [];
//遍历内容如果内容不是空并且是个标题再添加到数组。
$('.left01 a').each(function () {
let title = $(this);
if (!title.attr('target') || !title.text().trim()) return;
arr.push(title.text())
})
//将过滤好的内容返回
return arr;
}
拿到过滤好的数据干干净净就很快乐~一个简单的爬虫就到这里啦!
是不是没有想象中那么复杂呢?正则的匹配有兴趣的小伙伴可以把代码贴上来分享哟!