将工作做完,中午趁着休息时间用node做了一个简单的网络爬虫,将一个网站的图片下载至本地计算机中,以下是全部代码,代码不够完善,如果有想拿去玩玩的可以copy后完善一下。
/*
node实现网络爬虫
原理:
1.发起请求
2.获取目标网站的所有url地址
3.逐个请求图片url
4.获取请求数据
5.将图片存到硬盘
*/
const fs = require("fs");
const https = require('https');
const http = require("http");
// 目标url地址
let url = "http://xyq.163.com";
// 判断该网站是http的还是https的
let urlType = url.startsWith("https") ? https : http;
urlType.get(url, (res) => {
var content = "";
// 获取数据
res.on("data", buf => {
content += buf;
})
res.on("end", () => {
// 正则匹配图片地址
let reg = /src="(.*?(\.jpg|\.png))"/img;
let data;
while(data = reg.exec(content)){
getImage(data[1]);
}
});
});
function getImage(imgUrl) {
// 文件重命名
let stream = fs.createWriteStream("./images/" + parseInt(Math.random() * 100000) + (imgUrl.endsWith("jpg") ? ".jpg" : ".png"));
// 判断是http还是https请求
let resType = imgUrl.startsWith("https") ? https : http;
resType.get(imgUrl, res => {
res.pipe(stream);
})
}
运行起来,你会发现所有jpg和png的图片都下载到了本地计算机中,是不是很好玩?哈哈。
当然,这段代码还是存在很多问题的。
1、如果标签的是这种的 img src=’//a.jpg’ 的,那么需要将域名补充完整
2、这里只获取了jpg和png的,还有jpeg,PNG,JPG等其他图片格式的没有做处理