何为静态网页 ?
大体上的来说:在 chrome 中右键 -> 显示网页源代码 和 右键检查的 Elements 结构一致,那么就可以进行资源的爬取了。
准备工作
1.创建文件夹
mkdir mySpider-Node && cd mySpider-Node
2.创建 package.json
npm init -y
3.安装依赖 request
和 cheerio
npm i request cheerio
request 可以让 node 发送请求。cheerio 可以进行类似 jQuery 的 dom 操作。
获取图片 URL
创建 index.js
文件,内容如下:
// index.js
const request = require('request')
// 这里举的例子是 知乎日报
const url = 'https://daily.zhihu.com/'
request.get(url, (error, response, data) => {
console.log(data)
})
让我们来查看一下输出结果:
<!DOCTYPE html><html lang="zh-CN"><head><title>知乎日报 - 每天 3 次,每次 7 分
钟</title><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="description" content="在中国,资讯类移动应用的人均阅读时长是 5 分钟,而在知乎日报,这个数字是 21。以独有的方式为你"
...Other elements
data
中的内容为网页的 dom
结构,这个时候就可以用 cheerio
对 dom
进行操作了。
const request = require('request')
const cheerio = require('cheerio')
const url = 'https://daily.zhihu.com/'
request.get(url, (error, response, data) => {
if (error) return
const $ = cheerio.load(data)
$('.link-button img').each(function (index, element) {
console.log($(element).attr('src'))
})
})
现在已经能获取到图片地址了,接下来准备下载。
下载保存
创建 tools.js 文件
mkdir tools.js
代码如下:
const path = require('path')
const fs = require('fs')
const request = require('request')
// 下载函数
// 参数1: 要下载内容的地址
// 参数2: 要保存的文件夹名
// 参数3: 要保存的文件名
const download = (url, directory, filename) => {
// 根据当前目录生成文件夹目录
const dir = path.join(__dirname, directory)
// 判断文件夹是否存在
const isDir = fs.existsSync(dir)
// 不存在, 创建
if (!isDir) {
fs.mkdir(dir)
}
// 生成保存文件路径
const filePath = path.join(dir, filename)
// 下载并保存
request(url).pipe(fs.createWriteStream(filePath))
}
module.exports = download
之后在 index.js 中导入 tools 并使用。
const request = require('request')
const cheerio = require('cheerio')
const download = require('./tools')
const url = 'https://daily.zhihu.com/'
request.get(url, (error, response, data) => {
if (error) return
const $ = cheerio.load(data)
$('.link-button img').each(function (index, element) {
download($(element).attr('src'), 'images', index + '.jpg')
})
})
运行
运行 index.js
node index.js
查看项目目录,多出一个 images
文件夹,里面包含着网页中的图片。