吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2254|回复: 41
收起左侧

[Python 转载] Python获取Wallhaven的图片

[复制链接]
薛之谦6666 发表于 2022-7-8 23:11
代码开源在Github:https://github.com/Technicalflight/Python-get-wallhaven-pictures

[Python] 纯文本查看 复制代码
#获取网站内容
import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import Image
from io import BytesIO
from operator import index
import os
import request
import requests


def get_html(url):
    import requests
    r = requests.get(url)
    return r.text
#text转json
def text_to_json(text):
    import json
    return json.loads(text)
#调用def get_html(url)
def get_json(url):
    return text_to_json(get_html(url))
#获取图片URL,列表list的索引必须是整数或者切片,而不能是字符串类型
def get_image_url(json):
    #索引
    index = 0
    #列表
    url_list = []
    #获取图片的url
    for i in json['data']:
        url_list.append(i['url'])
        index += 1
    return url_list
#获取图片的id
def get_image_id(json):
    #索引
    index = 0
    #列表
    id_list = ''
    #获取图片的id
    for i in json['data']:
        id_list = id_list + str(i['id']) + ','
        index += 1
    return id_list
#获取图片的浏览数
def get_image_views(json):
    #索引
    index = 0
    #列表
    views_list = ''
    #获取图片的浏览数
    for i in json['data']:
        views_list = views_list + str(i['views']) + ','
        index += 1
    return views_list
#获取图片的类型
def get_image_type(json):
    #索引
    index = 0
    #列表
    type_list = ''
    #获取图片的类型
    for i in json['data']:
        type_list = type_list + str(i['file_type']) + ','
        index += 1
    return type_list
#获取图片的颜色配置
def get_image_color_config(json):
    #索引
    index = 0
    #列表
    color_config_list = ''
    #获取图片的颜色配置
    for i in json['data']:
        color_config_list = color_config_list + str(i['colors']) + '\n'
        index += 1
    return color_config_list
#获取图片的分辨率
def get_image_resolution(json): 
    #索引   
    index = 0
    #列表
    resolution_list = ''
    #获取图片的分辨率
    for i in json['data']:
        resolution_list = resolution_list + str(i['resolution']) + ','
        index += 1
    return resolution_list
#获取图片的尺寸
def get_image_size(json):
    #索引
    index = 0
    #列表
    size_list = ''
    #获取图片的尺寸
    for i in json['data']:
        size_list = size_list + str(i['file_size']/1048576) + 'MiB\n'
        index += 1
    return size_list
#获取图片的收藏数
def get_image_favorites(json):
    #索引
    index = 0
    #列表
    favorites_list = ''
    #获取图片的收藏数
    for i in json['data']:
        favorites_list = favorites_list + str(i['favorites']) + ','
        index += 1
    return favorites_list
#获取预览图片的下载链接
def get_image_downloads(json):
    #索引
    index = 0
    #列表
    downloads_list = ''
    #获取图片的下载链接
    for i in json['data']:
        #索引
        index2 = 0
        #列表
        downloads_list2 = ''
        for key,value in i['thumbs'].items():
            downloads_list2 = downloads_list2 + str(key) + ':' + str(value) + '\n'
            index2 += 1
        downloads_list = downloads_list + downloads_list2
        index += 1
    return downloads_list
#获取图片的创建时间
def get_image_created_at(json):
    #索引
    index = 0
    #列表
    created_at_list = ''
    #获取图片的创建时间
    for i in json['data']:
        created_at_list = created_at_list + str(i['created_at']) + '\n'
        index += 1
    return created_at_list

#获取图片原比例下载链接
def get_image_original_url(json):
    #索引
    index = 0
    #列表
    original_url_list = ''
    #获取图片的原比例下载链接
    for i in json['data']:
        original_url_list = original_url_list + str(i['path']) + '\n'
        index += 1
    return original_url_list

#下载图片
def download_image(url,path):
    #创建文件夹
    if not os.path.exists(path):
        os.makedirs(path)
    #文件名
    filename = url.split('/')[-1]
    #文件路径
    filepath = path + '/' + filename
    #浏览器头部信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
    }
    #下载图片
    response = requests.get(url,headers=headers)
    #保存图片
    with open(filepath,'wb') as f:
        f.write(response.content)
        f.close()
        print('下载完成')
    #打开图片
    img = Image.open(filepath)
    #绘制图片
    img.show()

#预览图片
def preview_image(url):
    #浏览器头部信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
    }
    #下载图片
    response = requests.get(url,headers=headers)
    #打开图片
    img = Image.open(BytesIO(response.content))
    #绘制图片
    img.show()



#显示图片信息
def show_image_info(json):
    #索引
    index = 0
    #列表
    info_list = ''
    #获取图片的信息
    for i in json['data']:
        info_list = info_list + '图片的id:' + str(i['id']) + '\n'
        info_list = info_list + '图片的url:' + str(i['url']) + '\n'
        info_list = info_list + '图片的浏览数:' + str(i['views']) + '\n'
        info_list = info_list + '图片的类型:' + str(i['file_type']) + '\n'
        info_list = info_list + '图片的颜色配置:' + str(i['colors']) + '\n'
        info_list = info_list + '图片的分辨率:' + str(i['resolution']) + '\n'
        info_list = info_list + '图片的大小:' + str(i['file_size']/1048576) + 'MiB\n'
        info_list = info_list + '图片的收藏数:' + str(i['favorites']) + '\n'
        info_list = info_list + '图片的创建时间:' + str(i['created_at']) + '\n'
        info_list = info_list + '预览图片的下载链接:\n' + str(i['thumbs']) + '\n'
        info_list = info_list + '图片的原比例下载链接:' + str(i['path']) + '\n\n'
        index += 1
    return info_list




#定义变量
def set_var(url):
    #定义字符串变量n
    n = ''
    #输入变量n
    n = input('请输入要搜索的关键字:')
    url = 'https://wallhaven.cc/api/v1/search?q='+ n +'&categories=111&purity=100&sorting=relevance&order=desc'
    json = get_json(url)
    print('一共有' + str(json['meta']['last_page']) + '页')
    #定义变量page
    page = 0
    #输入页数
    page = input('请输入要搜索的页数:')
    url = 'https://wallhaven.cc/api/v1/search?q='+ n +'&categories=111&purity=100&sorting=relevance&order=desc&page=' + page
    print(url)
    return url
    


#运行主程序
if __name__ == '__main__':
    url = set_var('')
    json = get_json(url)
#换行
    print('\n')
#输出结果
    #print('一共' + get_image_url(json).__len__().__str__() + '张图片')
    #print('图片的id:\n' + get_image_id(json))
    #print('图片的浏览数:\n' + get_image_views(json))
    #print('图片的类型:\n' + get_image_type(json))
    #print('图片的颜色配置:\n' + get_image_color_config(json))
    #print('图片的分辨率:\n' + get_image_resolution(json))
    #print('图片的大小:\n' + get_image_size(json))
    #print('图片的收藏数:\n' + get_image_favorites(json))
    #print('预览图片的下载链接:\n' + get_image_downloads(json))
    #print('图片的原比例下载链接:\n' + get_image_original_url(json))
    #print('图片的创建时间:\n' + get_image_created_at(json)) 

    print('图片的信息:\n' + show_image_info(json))
#创建文件并写入内容
    f = open('#####################', 'w')#这里填你想将图片保存的地址
    f.write(show_image_info(json))
    f.close()
#打开文件
    f = open('#####################', 'r')#这里填你想将图片保存的地址
    if f.read() == '':
        print('文件为空')
    else:
        print('写入完成')
    f.close()
#输入要下载图片的链接
    #死循环
    while True:
        down_url = input('请输入要下载的图片的链接:')
        #预览图片
        preview_image(down_url)
        #确认是否下载
        down_sure = input('是否下载?(y/n)')
        if down_sure == 'y':
        #下载图片
            download_image(down_url, '#####################')#这里填你想将图片保存的地址
        else:
            print('取消下载')



----------------------------------------------------------------------------------------------------------
运行截图:

内容写入文本

内容写入文本


下载图片

下载图片


运行

运行

免费评分

参与人数 7吾爱币 +7 热心值 +7 收起 理由
Fortunately + 1 + 1 我很赞同!
jiaotong888 + 1 + 1 我很赞同!
henrylong1989 + 1 + 1 用心讨论,共获提升!
叹丶 + 1 + 1 谢谢@Thanks!
小小的石头13 + 1 + 1 我很赞同!
LonelyCrow + 1 + 1 谢谢@Thanks!
RainH + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lozhuo 发表于 2022-7-9 12:52
marlonQAQ 发表于 2022-7-9 11:34
是wallhaven官方的嘛,叫什么呀,能给个链接不,谢谢老哥

电脑版我也是在吾爱上看到的,你看看这个这个链接
Wallhaven 桌面版 3.0.1
安卓客户端在谷歌play商店下载,自己找个梯子
lozhuo 发表于 2022-7-9 14:06
marlonQAQ 发表于 2022-7-9 11:34
是wallhaven官方的嘛,叫什么呀,能给个链接不,谢谢老哥

刚给你回复的一直在审核中,你在吾爱搜wallhaven就能搜到电脑版,安卓版某歌商店下载
雾都孤尔 发表于 2022-7-8 23:29
nj2004 发表于 2022-7-9 00:02
感谢分享!
a485537 发表于 2022-7-9 00:03
感谢大佬分享
风夜南 发表于 2022-7-9 00:30
mark 学习,谢谢楼主
52shijie 发表于 2022-7-9 07:14
感谢楼主分享
GndGarf 发表于 2022-7-9 08:14
66666  感谢
Rt39 发表于 2022-7-9 09:27
mark一下,谢谢楼主分享
NinjaY 发表于 2022-7-9 09:28
学习了,谢谢
CYANCHAOS 发表于 2022-7-9 09:34
优秀优秀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-11 03:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表