分析百度图片请求的参数

https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&word="+keyWord+"&pn="+pn+"&rn="+rn+"&width=1920&height=1080&cg=wallpaper

经过删减分析得出关键几个参数
1. word 关键字
2. pn 本次请求的初始位置
3. rn 当前页最高的数据量
4. width=1920&height=1080&cg=wallpaper 这几个参数为图片类型 像素

分析json数据


1. 很容易看出type为图片的类型
2. 在查找图片大图地址的时候,参考网络上的说明,objURL即为大图地址,网络上的爬虫也都是直接用的,但是目前来看百度进行了加密处理,查看他的DOM的结构。

经过尝试红框内即为真实地址,所以猜测他的解密函数应该在本地。并非使用服务器解密。于是尝试寻找解密函数。
在查找的过程中发现图片对应的超链接内也含有真实地址,并且包含其他参数,于是接着寻找

这个地方和a链接地址很相似,于是往后查看真实地址的参数

可以看出地址是被处理过的,所以猜测uncompoleURL即为解密函数,接着查找解密函数所在的位置

大功告成,解密函数找到了,可以看出加密方式很简单,替换加密。

编写爬虫

const request = require('request');
const fs = require('fs');
const readline = require('readline');
const  mkdirp= require('mkdirp');
const  async = require('async');
const url = require('url');
// const  path = require('path');
// const rp = require('request-promise');
// const cheerio = require('cheerio');
// const readLineSync = require('readline-sync');/**** 配置信息 后期可通过控制台动态配置*/
let options = {keyWord:"猫", // 用于自定义文件标识maxDown:3  // 最大并行下载量
};//百度图片解密函数
let jiemi = (function () {var t = {w: "a",k: "b",v: "c",1: "d",j: "e",u: "f",2: "g",i: "h",t: "i",3: "j",h: "k",s: "l",4: "m",g: "n",5: "o",r: "p",q: "q",6: "r",f: "s",p: "t",7: "u",e: "v",o: "w",8: "1",d: "2",n: "3",9: "4",c: "5",m: "6",0: "7",b: "8",l: "9",a: "0",_z2C$q: ":","_z&e3B": ".",AzdH3F: "/"}, n = /([a-w\d])/g, i = /(_z2C\$q|_z&e3B|AzdH3F)/g;return {compile: function(t) {if (!t)return "";for (var e = (t.charCodeAt(0) + t.length).toString(16), n = 1; n < t.length; n++)e += "g" + (t.charCodeAt(n) + t.charCodeAt(n - 1)).toString(16);return e},uncompile: function(e) {if (!e)return "";var r = e.replace(i, function(e, n) {return t[n]});return r.replace(n, function(e, n) {return t[n]})},uncompileURL: function(t) {return /^(http|https)/.test(t) ? t : this.uncompile(t)},trimTags: function(t, n) {var i = "";return n && n.length && (i = function(t, i) {return e.inArray(i, n) < 0 ? "" : t}),String(t).replace(/<\/?([^>]*)>/g, i)}}
})();//控制台接受参数函数
function readSyncByRl(tips) {tips = tips || '> ';return new Promise((resolve) => {const rl = readline.createInterface({input: process.stdin,output: process.stdout});rl.question(tips, (answer) => {rl.close();resolve(answer.trim());});});
}readSyncByRl('请输入搜索关键字:').then((keyWord) => {let pn = 0,rn=30;keyWord =  encodeURIComponent(keyWord);let queryUrl = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&word="+keyWord+"&pn="+pn+"&rn="+rn+"&width=1920&height=1080&cg=wallpaper";request({url: queryUrl,headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',"X-Requested-With":"XMLHttpRequest"}},function (err,res,body) {if(!err && res.statusCode === 200){let result = eval('(' + res.body + ')').data,dir = 'img';mkdir(dir,result);}});
});/*** 创建目录*/
function mkdir(dir,links) {console.log('准备创建目录:%s', dir);if (fs.existsSync(dir)) {console.log('目录:%s 已经存在', dir);downImages(dir,links);}else {mkdirp(dir, function (err) {console.log('title目录:%s 创建成功', dir);downImages(dir,links);});}
}/*** 下载图片*/
function downImages(dir,links) {console.log("总共%d张图片,准备下载",links.length);let errNum = 0;async.eachOfLimit(links, options.maxDown,function (imgUri,index,cb) {let relLink = jiemi.uncompileURL(imgUri.objURL);if(!relLink){console.error('地址无效');cb();}else{let myURL = url.parse(relLink);let arr =myURL.pathname.split('/');let fileName = arr[arr.length-1];let imgPath = dir+'/'+fileName+'/';console.log('开始下载图片:%s,保存到:%s', fileName, dir);request(relLink).on('error', function(err) {++errNum;console.log('出错'+errNum+'个');cb();}).pipe(fs.createWriteStream(imgPath)).on('finish',()=>{console.log('图片下载成功:%s', relLink);cb();})}},function (err) {if(err){console.log('下载出错,请稍后重试。。。错误信息:'+err.message);}else {console.info('下载完成')}});
}
  1. 我们先把百度的解密函数征途复制出来,放到一个自执行的函数中。
  2. 使用readline获取用户在控制台输入的关键词。
  3. 使用mkdir创建文件目录
  4. 使用fs 保存文件
  5. 使用request请求数据

项目地址

github

node 批量下载百度图片壁纸相关推荐

  1. Python实用案例,Python脚本,Python实现批量下载百度图片

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  2. python爬虫实现批量下载百度图片

    今天和小伙伴们合作一个小项目,需要用到景点图片作为数据源,在百度上搜索了一些图片,感觉一个一个手动保存太过麻烦,于是想到用爬虫来下载图片. 本次代码用到了下列一些python模块,需要预先安装Beau ...

  3. urllib3批量下载百度图片

    ''' urllib3批量下载百度图片 ''' import urllib3 import re start_url = 'http://image.baidu.com/search/index?tn ...

  4. 用python批量下载网络图片大全_实战干货:用 Python 批量下载百度图片!

    为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地电脑 ...

  5. 用 Python 批量下载百度图片

    为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地电脑 ...

  6. 使用Java编写爬虫,下载百度图片

    因为最近需要很多图片素材做机器训练,所以写一个爬虫来下载百度图片里的一些图片,用作机器学习. 先看看效果图: 实现思路: 根据百度图片的Ajax请求,用Chrome获取到URL,然后通过改变URL参数 ...

  7. E音乐盒! emusicbox 批量下载百度MP3搜狗MP3

    emusicbox 可以批量下载百度最热最新的MP3搜狗MP3. 一款最近很有新意的mp3媒体播放器.可以批量下载百度等等音乐MP3.LRC歌词.收藏图片.下载视频MTV,呵呵 内置google音乐搜 ...

  8. python批量下载必应每日壁纸

    文章目录 python批量下载必应每日壁纸 一.图片来源选择 二.python实现 python批量下载必应每日壁纸 必应搜索的每日背景壁纸都是高质量的图片,下载来当桌面壁纸再好不过了,微软官方也推出 ...

  9. aspx网页背景图片设置代码_python requests,BeautifulSoup批量下载360图片

    本代码演示通过python的requests,BeautifulSoup库批量下载360图片,并保存在本机的路径 代码如下: #BeautifulSoup库是网页爬虫解析库,主要用来对HTML源代码进 ...

最新文章

  1. iOS iCloud云存储数据
  2. java正则表达式中的坑String.matches(regex)、Pattern.matches(regex, str)和Matcher.matches()
  3. 限时购校验小工具dubbo异步调用实现限
  4. 没毛病!00后和90后成为暑期出游两大主力群体
  5. Altium AD20的PCB板框绘制、定义板子形状、重新设置原点、放置尺寸标注
  6. 特征等宽离散化matlab程序_控制器的离散化(一)
  7. Java使用comms-net jar包完成ftp文件上传进度的检测功能
  8. jquery遍历数组的方式
  9. Sims 4 Cottage Living 模拟人生4乡间生活 作弊码整理
  10. 人脸识别之insightface开源代码使用——自定义数据集制作
  11. java后端面试总结
  12. 生活随记 - 春节快递延误的正确处理方式
  13. 大智慧专业财务数据服务器文件,大智慧专业财务数据及代码内容对照表-2
  14. python画小狗代码_用Python画一只有点方的小狗狗——turtle库circle()函数实践
  15. 腾讯云点播服务端API
  16. Google 发布 ARCore 1.0
  17. 25+本来自亚马逊的JavaScript jQuery畅销书籍
  18. 5月编程排行榜出炉,最佳编程语言是谁?
  19. b类产品访谈提纲_谷歌产品分析师访谈
  20. 雅思词汇list1-list12总结

热门文章

  1. 互联网晚报 | 8月18日 星期三 | 荣耀回应上市传闻;小爱同学宣布月活用户破亿;许家印卸任恒大地产董事长...
  2. 视频教程-思科安全IPS/IDS入侵防御系统-防护加固
  3. 微信小程序利用云函数获取小程序码(二维码) 将buffer流转换为图片
  4. 字符串哈希-Acwing-后缀数组
  5. (休息几天)读米什金之货币银行学——利率
  6. A Great Start!
  7. Android关于分享到Facebook
  8. Sublime与Evernote的结合
  9. java查重小程序_”万能查重器“小程序
  10. 女性买车,都在关注什么?