1. Node.js简介
Node.js是基于Chrome V8引擎的JavaScript运行时,可以使JavaScript具备了I/O、网络和文件系统等方面的能力。正因为拥有这些能力,使得Node.js可以被应用于更广泛的领域,比如Web应用、命令行工具、爬虫等等。
2. 爬取图片的步骤
大部分的网站都是可以通过爬虫技术获取到图片,而以下是我们可以用Node.js去实现图片爬取的步骤:
2.1 获取网页内容
获取网页内容可以使用Node.js的http
模块,然后通过get
方法去获取网页内容,代码如下:
const http = require('http');
const url = 'http://www.example.com';
http.get(url, (res) => {
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
console.log(rawData);
});
});
上述代码中,我们首先引入了http
模块,然后定义了我们要爬取的网页地址url
。接着使用http.get
方法去获取网页内容,当data
事件触发时,将获取的信息存在字符串变量rawData
中。
2.2 解析HTML内容
获得了网页的内容后,我们需要从中解析出图片的URL地址,这可以使用Node.js的cheerio
模块来实现。代码如下:
const cheerio = require('cheerio');
const $ = cheerio.load(rawData);
const img = $('img');
console.log(img.attr('src'));
在这段代码中,我们使用cheerio.load
方法将获取到的网页内容进行解析,然后使用$('img')
选中所有的img
标签,并使用attr
方法获取src
属性即可获得第一张图片的URL地址。
2.3 下载图片并保存
最后一步,我们需要将爬取到的图片保存本地并命名,这可以使用Node.js的fs
模块来实现。代码如下:
const fs = require('fs');
const request = require('request');
const imgStream = request(imgUrl);
const imgPath = './images/img01.png';
imgStream.pipe(fs.createWriteStream(imgPath));
上述代码中,我们使用request
去获取图片,这是因为使用http
模块的话,需要自己去处理流数据。然后我们定义了保存的路径和文件名./images/img01.png
,最后将获取到的流数据保存到文件中。
3. 完整代码
下面是一个完整的图片爬取的代码实现:
const http = require('http');
const cheerio = require('cheerio');
const fs = require('fs');
const request = require('request');
const url = 'http://www.example.com';
const imgPath = './images/img01.png';
http.get(url, (res) => {
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
const $ = cheerio.load(rawData);
const img = $('img').eq(0);
const imgUrl = img.attr('src');
const imgStream = request(imgUrl);
imgStream.pipe(fs.createWriteStream(imgPath));
console.log('Image saved!');
});
});
这段代码将会爬取http://www.example.com网站的第一张图片并保存在./images/img01.png。
4. 总结
在本篇文章中,我们介绍了如何使用Node.js爬取图片。具体来说,我们要完成三个步骤:先获取网页的内容,然后解析HTML内容得到图片的URL地址,最后将获取到的图片保存本地。在实际开发中,需要根据网页的结构和图片的规律来进行相应的调整和优化。
需要注意的是,在进行网页爬取时需要尊重相关法律法规,避免非法、过度或不当的爬虫行为。同时,对于爬取到的数据也要进行合理使用,遵守相关的契约和法律法规。