node爬虫系列 (一)爬取静态网页图片链接并下载

何为静态网页 ?
大体上的来说:在 chrome 中右键 -> 显示网页源代码 和 右键检查的 Elements 结构一致,那么就可以进行资源的爬取了。

准备工作

1.创建文件夹

mkdir mySpider-Node && cd mySpider-Node

2.创建 package.json

npm init -y

3.安装依赖 requestcheerio

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 结构,这个时候就可以用 cheeriodom 进行操作了。

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 文件夹,里面包含着网页中的图片。

猜你喜欢

转载自blog.csdn.net/sunlei19951007/article/details/80261241