爬虫

爬虫是一个对计算机综合能力要求比较高的技术活。

首先,要对网络协议,尤其是http协议,有基本的了解,能够分析网站的数据请求响应

其次,需要使用一些工具,简单的场景下使用chrome devtools的network面板足矣,除此之外还有服务端工具:

  • cheerio:jQuery核心功能的一个快速灵活而又简洁的实现,主要用于服务器端操作DOM
  • axios:网络请求库,可以发送http请求

步骤

以👶的某个图册为例

第一步:分析HTML结构,像我这里因为所有的图片url数据都被保存在了这里所以很好懂

第二步:用代码读取所有图片,按照实际的HTML结构编写代码,可能会需要换页、点击等

1
2
3
4
5
6
7
8
9
10
11
12
const getImgs = async () => {
const body = await axios
.get('https://cheriko.fun/gallery/collect/meme.html')
.then((res) => res.data);

// 这下就可以用jq方式操作html字符串了
const $ = cheerio.load(body);
// 逻辑需要根据具体页面内容和结构来写
const loadBtn = $('.gallery-data').eq(0);
const images = JSON.parse(loadBtn.text());
console.log(images);
};

第三步:下载图片

1
2
3
4
5
6
7
8
9
10
// 下载图片
images.forEach(async (img) => {
const buffer = await axios
.get(img.url, { responseType: 'arraybuffer' })
.then((res) => res.data);
const ws = fs.createWriteStream(
path.join(__dirname, '../meme' + new Date().getTime() + '.jpg'),
);
ws.write(buffer);
});

于是图片都下载到了: