在nodejs中,可以通过不断对服务器进行请求,以及本身的fs =》filesystem 模块和clientRequest模块对网站的资源进行怕取,目前只做到了对图片的趴取!视频文件格式各异,有的视频网站上视频可能是加密过的。无法爬取来;
‘use strict‘; const http = require(‘http‘); const fs = require(‘fs‘); const path = require(‘path‘); // 创建一个clientRequest对象 // const cr = http.get(‘http://www.baidu.com‘); // cr.on(‘response‘, (res) => { // console.log(‘服务端接受到我的请求了‘); // console.log(res); // }) // 需要将所有的img标签对应的src属性值提取出来 //再次发起请求,将突破保存在本地的磁盘上面; //给定一个url,将其下载到本地磁盘;封装一个函数 //不断调用这个函数;使用正则表达式,提取所需要的字符串; // const cr = http.get(‘http://www.dbmeinv.com/‘, (res) => { // let str; // // 注册data流事件; // res.on(‘data‘, (chunk) => { // str += chunk; // }); // //注册end事件; // res.on(‘end‘, () => { // console.log(str); // }) // }) // const cr = http.get(‘‘); // cr.on(‘response‘, (res) => { // console.log(‘服务端接受到我的请求了‘); // console.log(res); // let data = ‘‘; // res.on(‘data‘,(chunk)=>{ // data += chunk; // }); // res.on(‘end‘,()=>{ // console.log(data); // }) // }); for(let i =1;i<17;i++) { // let num = Math.random()*12000+ let url =‘https://user.qzone.qq.com/812551954‘; // console.log(url); down(url); } function down(url){ http.get(url,(res)=>{ let data = ‘‘; res.on(‘data‘,(chunk)=>{ data += chunk; }); res.on(‘end‘,()=>{ //文件 let regexp = /src="(http:\/\/[0-9a-zA-Z.\/]+jpg)"/g; let arr = []; let temp; while((temp=regexp.exec(data))!=null){ arr.push(temp[1]); } // console.log(arr); arr.forEach((item)=>{ download(item); }) }) }); } //用正则表达式去匹配对应的图片资源; // 首先编写函数下载单张图片 // 目标地址 // 获取目标页面的所有内容; 包括html等; function download(url) { // let url = "http://ww2.sinaimg.cn/large/0060lm7Tgy1fe69ac1v44j30dw0k3gof.jpg" //创建一个clientRequest对象,向服务器发送请求; http.get(url, (res) => { res.setEncoding(‘binary‘); let data = ‘‘; //数据开始传输事件; res.on(‘data‘, (chunk) => { data += chunk; }); //数据传输结束的时候,将其接受 res.on(‘end‘, () => { let pic = path.basename(url); //此时图片的内容已经在data中了; //图片存储的路径 let file = path.join(‘pic‘, pic); fs.writeFile(file, data, ‘binary‘, (err) => { if (err) throw err; console.log(`图片${pic}下载成功`); }) }) }) }
时间: 2024-12-21 10:56:43