兴趣是最好的老师,突然的心血来潮,想换壁纸,在网上转了一圈好多漂亮的图片,点击进入,下载,好!一张壁纸下载完成。我想多下载几张,怎么破,在线等!急!!!!!
目标图片
壁纸到处都是,但是通常我们想到的都是某度的图片,请原谅我这次!打开输入框,搜索,壁纸,好,好,就是你,第一个链接,点进去,成功打入壁纸大军内部,紧张,兴奋。很好,你已经成功的引起了某度服务器的注意。为自己先点个赞!
解决思路
首先我想到的是获取当前页面的url,然后利用正则去获取图片的url,这种方式的去是可以,但是只能获取到一页的图片,大概30张。也是不小的收获。
第二,F12打开开发者工具,进行查看,发现一个特殊的接口,我当时都蒙了,图片的url怎么全在这里。
我花了半天的时间通过正则获取到的url这么没用。
很好,这个接口成功的引起了我的注意。
获取到url,那接下来的事就不难了。鼓掌
代码实现
代码这块的思路,因为需要获取网页内容,调用接口,这里我们使用requests模块,当然有其他的模块也是可以的。只要能解决问题。
导入import requests
既然有 接口,就有参数,那来看一下:
https://image.baidu.com/search/acjson
参数
{
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': keyword,#控制搜索关键字
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': 0,
'word': keyword,#控制搜索关键字
's': '',
'se': '',
'tab': '',
'width': "",
'height': "",
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'pn': i,#控制页数
'rn': 30,
'gsm': '1e',
'1488942260214': ''
}
剩下的事还难吗?接着看:
请求接口,并用json格式返回。
tp=requests.get(url,params=j,headers=header).json()
然后下载
with open(str(int(time.time()))+".jpg","wb") as f:
搞定,来看完整代码:
import requests
import time
def getManyPages(keyword,pages):#(关键词,需要页数)。
params=[]
header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
for i in range(30,30*pages+30,30):
params.append({
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': keyword,#控制搜索关键字
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': 0,
'word': keyword,#控制搜索关键字
's': '',
'se': '',
'tab': '',
'width': "",
'height': "",
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'pn': i,#控制页数
'rn': 30,
'gsm': '1e',
'1488942260214': ''
})
url = 'https://image.baidu.com/search/acjson'
urls = []
for j in params:
tp=requests.get(url,params=j,headers=header).json()
for y in range(0,30):
url2=tp.get('data')[y]["middleURL"]
tp2 = requests.get(url2).content
time.sleep(1)#停顿一秒钟,是为了用时间戳来命名
with open(str(int(time.time()))+".jpg","wb") as f:
f.write(tp2)
if __name__=="__main__":
getManyPages("高清 动漫",1)#(关键词,需要页数)。
注:电脑观看效果更佳!