在上一个版本的基础上加入了搜索功能,并且可以自定义下载张数
import requests
import re
import os
import time
import random
import cv2
def main():
search_content = input('请输入您需要搜索的壁纸主题(只能输入英文):')
print('--------------------------------------------------------------')
search_quantity = int(input('请输入您想下载的壁纸数量,输入1下载24张,输入2下载48张,输入3下载72张:'))
print('--------------------------------------------------------------')
urls = get_urls(search_content, search_quantity)
WallLink = get_WallLink(urls)
print(f'即将下载{len(WallLink)}张关于‘’{search_content}‘’的壁纸')
get_WallPaper(WallLink, search_content)
'''解析网页'''
def get_urls(search_content,n):
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41'}
page=random.randint(0,10)
All_urls=[]
for i in range(n):
url=f'https://wallhaven.cc/search?q={search_content}&categories=110&purity=100&sorting=relevance&order=desc&page={page}'
response=requests.get(url,headers=headers)
html=response.text
urls = re.findall('<img alt=".*?" class=".*?" data-src="(.*?)" src="" >', html)
All_urls.extend(urls)
# print(f'一共{len(All_urls)}张')
return All_urls
'''解析图片'''
def get_WallLink(All_urls):
Link=[]
for url in All_urls:
if url.find('lg/') !=-1:
str=url.split('lg/')[-1]
elif url.find('lg/') ==-1:
str=url.split('small/')[-1]
str1 = str[3:]
str2 = str[0:3]
# print(str1)
# print(str2)
baseurl = 'https://w.wallhaven.cc/full/' + str2 + 'wallhaven-' + str1
Link.append(baseurl)
if len(Link)!=0:
return Link
else:
return print('不好意思,没有搜索到内容')
'''保存图片'''
def get_WallPaper(Link,search_content):
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41'}
# 建立文件夹
dir_name= f'../{search_content}'
flag=0
print('---------------------------------------------------')
if not os.path.exists(dir_name):
os.mkdir(dir_name)
print(f'壁纸将保存在路径为”{os.path.abspath(dir_name)}“的文件夹中')
print('即将开始下载,请您耐心等待...')
for url in Link:
flag=flag+1
filename=url.split('/')[-1]
response=requests.get(url,headers=headers)
with open(dir_name+'/'+filename,'wb')as f:
f.write(response.content)
print(f'壁纸{flag}已经下载好...')
print('-----------------')
print('-------------------------壁纸下载完成-------------------------')
print(f'请打开路径”{os.path.abspath(dir_name)}“查看下载好的壁纸')
print('------------------------------------------------------------')
while True:
print('******************** 壁纸下载神器 ********************')
print('--------------------|输入1 按Enter键确认:搜索壁纸 |--------------------')
print('--------------------|输入2 按Enter键确认:退出程序 |--------------------')
choice=int(input())
if choice==1:
main()
elif choice==2:
break
else:print('输入错误,请重新输入')