一般爬虫类型

一般分为两类

1.服务端渲染的页面(ssr)

在服务端生成DOM树,即可以右键查看源代码,可以看到完整html片段

这个时候可以使用cherrio+axios进行爬虫

2.客户端渲染的页面(csr)

在客户端生成DOM树,右键查看源代码是看不到的有用信息

这个时候需要分析接口

而b站就是属于第二种

分析流程

  1. 找到返回壁纸的接口

  2. 通过访问接口,返回批量壁纸下载链接

  3. 下载壁纸

准备

  1. 目录

    |--img
    |
    |
    |--index.js
    
  2. 安装依赖

    axios请求库

    npm i axios
    

开始

1.找到返回壁纸的接口

2.通过访问接口,返回批量壁纸下载链接

可以看到图片的src在data对象中,通过遍历就可以获取所有下载链接

//分析页面
async function parsePage(uid, num) {try {const downUrlArr = []const downNameArr = []for (let i = 0; i <= num; i++) {//接口地址let pageUrl = "https://api.vc.bilibili.com/link_draw/v1/doc/doc_list?uid=" + uid + "&page_num=" + i +"&page_size=30&biz=all"const res = await axios.get(pageUrl)res.data.data.items.forEach((item) => {let title = item.doc_idlet imgUrlArr = item.pictureslet imgUrl = imgUrlArr[0].img_src//存入数组downUrlArr.push(imgUrl)downNameArr.push(title)});}//打印出下载链接console.log(downUrlArr)//下载图片downImgs(downUrlArr, downNameArr)return Promise.resolve()} catch (err) {return Promise.reject(err)}
}

3.下载壁纸

async function downImg(imgUrl, index) {try {//图片路径let pathname = path.resolve(__dirname, `./img/${imgUrl.split('/').pop()}`);// console.log(pathname)//创建图片写入流const res = await axios.get(imgUrl, {responseType: 'stream'})let ws = fs.createWriteStream(pathname)await res.data.pipe(ws);await res.data.on('close', function() {ws.close()console.log(`第${index}张写入完成`);})return Promise.resolve()} catch (err) {console.log('写入失败')return Promise.reject(err)}
}

运行

完整代码

const axios = require('axios')
const fs = require('fs')//分析页面
async function parsePage(uid,num){try {//接口地址let pageUrl= "https://api.vc.bilibili.com/link_draw/v1/doc/doc_list?uid="+uid+"&page_num=" + num + "&page_size=30&biz=all"const downUrlArr = []const downNameArr = []let res = await axios.get(pageUrl)res.data.data.items.forEach((item) => {let title = item.doc_idlet imgUrlArr = item.pictureslet imgUrl = imgUrlArr[0].img_src//存入数组downUrlArr.push(imgUrl)downNameArr.push(title)  });// //下载图片downImgs(downUrlArr,downNameArr)return Promise.resolve()}catch(err){return Promise.reject(err)}
}
//下载图片
async function downImgs(imgUrlArr,downNameArr){try {for(let i=0 ; i<imgUrlArr.length ; i++){console.log(`开始下载第${i+1}张图片`)await downImg(imgUrlArr[i],downNameArr[i])console.log(`第${i+1}张图片下载完成`)await wait(5000*Math.random())}return Promise.resolve()}catch(err){console.log('写入失败')return Promise.reject(err)}}//下载图片
async function downImg(imgUrl){try{//图片路径let pathname = `./img/${imgUrl.split('/').pop()}`// console.log(pathname)//创建图片写入流const res = await axios.get(imgUrl,{responseType:'stream'})await res.data.pipe(fs.createWriteStream(pathname));console.log('写入成功');return Promise.resolve()}catch(err){console.log('写入失败')return Promise.reject(err)}
}//设置等待时间--防封
async function wait(times){return new Promise((reslove) => {console.log(`等待${times/1000}s后重新发起请求`)setTimeout(() => {reslove()},times)})
}//开始爬取
async function spider(uid,num){//uid B站uid,//num 爬取页面数for(let i=0 ; i<=num ; i++){parsePage(uid,i)}}spider(6823116,3)

下面放几张爬的壁纸(很好看,用来做桌面壁纸)



爬取b站壁纸娘壁纸|node爬虫相关推荐

  1. Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  2. Python爬虫新手入门教学(十三):爬取高质量超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  3. python爬取王者_python 爬取王者荣耀高清壁纸

    一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 预览一下桌面吧: 是不是看着这样的桌面也很带感,_ (学会这个技术,你可以爬取其他网站的类似图片 ...

  4. python 爬取王者荣耀高清壁纸

    代码地址如下: http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

  5. python爬虫爬取必应每日高清壁纸

    python爬虫爬取必应每日高清壁纸 一.简介 二.使用的环境 三.网页分析 1.分析网页每一页url形式以及总页数 2.网页重要信息收集 3.在源码中寻找所需信息的位置 四.代码实现 五.运行爬虫 ...

  6. 简单爬取wallpaper heaven高清壁纸(福利满满~)

    简单爬取wallpaper heaven高清壁纸 2021年1月30日更新 由于网站架构更改,以下内容已经并不能再实现爬取 思路大体不变,仅供参考思路 前言:wallpaper heaven是一个拥有 ...

  7. Python爬虫实战| Python爬取英雄联盟高清壁纸

    先看一下最终爬取的效果,每个英雄的壁纸都被爬取下来了: "黑暗之女 安妮"的12张壁纸: 高清大图: 下面开始正式教学! 版本:Python 3.5 工具:Jupyter note ...

  8. Python爬取LOL高清皮肤壁纸

    Python爬取LOL高清皮肤壁纸 兴趣点: 这两天复习爬虫,CSDN上看到了一个爬取LOL皮肤的博客,哎这个有意思,看了一下他写的代码,感觉难度还可以,就结合着自己的理解写了一下 参考博客: 传送门 ...

  9. 批量爬取手机某app动态壁纸

    批量爬取手机某app动态壁纸 发现一个很好看的手机动态壁纸app,但app广告很是烦人,于是... 一.准备工具 IDEA社区版:撸java代码专用神器 Fiddler Everywhere:网络抓包 ...

  10. python爬虫_爬取B站视频标题

    着手写爬虫前,需要了解的几个概念: URL 全称 Uniform Resource Locator (统一资源定位器),格式为:协议+主机+端口+路径. 比如:https://www.bilibili ...

最新文章

  1. 【ACM】杭电OJ 4548 美素数(二次打表)
  2. RabbitMQ(三):RabbitMQ 使用场景
  3. C++继承中析构函数 构造函数的调用顺序以及虚析构函数
  4. [How TO]-ubuntu下安装selenium
  5. SAP FICO与金蝶财务软件的区别
  6. java 多网卡ip_java获取双网卡ip地址
  7. Boolan STL 第三周笔记
  8. 华为余承东鸿蒙系统随时可以上线,华为发布鸿蒙系统,余承东称随时可替换安卓...
  9. socket.io插件调用的demo
  10. poi导出word模板项目实例(一个文件)
  11. DOM中cloneNode的使用之旅
  12. 极客大学产品经理训练营:数据分析 第16课总结
  13. wso2_使用WSO2开发
  14. Video.js - HTML5 视频播放器
  15. 基本过滤工具之配置前缀列表
  16. 在线暴躁:script /问题
  17. 【板栗糖GIS】如何重复利用arcmap图层的符号样式
  18. 斐讯n1刷armbian建lnmp环境+WordPress
  19. js实现局部刷新数据
  20. leetcode59.螺旋矩阵II

热门文章

  1. 华为服务器虚拟化主备怎么切换,云服务器可以主备切换
  2. java基础之HashMap源码分析
  3. 成都温江少年宫计算机培训班,温江建成13个乡村少年宫 农村孩子家门口开课
  4. html中自定义浏览器标题栏小图标
  5. html悬浮方式,HTML页悬浮div的两种方式
  6. 遍历取值异常(Hashtable Enumerator)
  7. 美国CS PhD找工作经验总结
  8. boost中静态库编译没有-fPIC选项的问题解决方案
  9. Linux Redis重启数据丢失解决办法
  10. 蓝桥杯2016第七届C语言B组省赛习题题解——习题B.生日蜡烛