话痨司机啊 发表于 2022-7-6 10:25

【可双击运行】Wallhaven 热门壁纸下载程序

本帖最后由 话痨司机啊 于 2022-7-8 09:16 编辑

Wallhaven大名鼎鼎的壁纸下载网站,先说明一下出错看日志,如果是连接错误就是因为“墙”,请自行开代{过}{滤}理,本程序可以自动挂上你开的代{过}{滤}理端口。如果其他报错,请粘贴错误。


防止有人杠我,提前告知不是缩略图!!


【exe 双击运行 成品下载】:链接: https://pan.baidu.com/s/16BgiMLTdGJhl2HzxqyfeaQ?pwd=91eb 提取码: 91eb


效果图:








"""
_description_ : wallhaven 热门壁纸下载,日志在文件夹内
_ author_ : 话痨司机(俄语发音)
"""
import requests
from lxml import etree
from pathlib import Path
from rich import print
from loguru import logger
from urllib.request import getproxies   

logger.add(Path(__file__).parent.joinpath('wallhaven_download.log'))

def get_local_proxy():
    """
    尝试获取代{过}{滤}理
    """
    global my_proxies
    try:
      my_proxies = getproxies()['http'] or getproxies()['https']
    except KeyError:
      my_proxies = None

def get_response(url):
    '''
    获取response
    '''
    try:
      res = requests.get(url,timeout=30,proxies=my_proxies)
      return res
    except Exception as e:
      logger.exception(e)
      
@logger.catch
def gets_the_primary_jpg(response):
    '''
    初步获取图片地址
    '''
    xpath_path = '//div[@id="thumbs"]/section[@class="thumb-listing-page"]/ul'
    et = etree.HTML(response.text)
    li = et.xpath(xpath_path)
    pic_datas = []
    for l in li:
      if l is not None:
            pic_url = l.xpath('figure/img/@data-src')
            span = l.xpath('figure/div/span/span/text()')
            if 'PNG' in span:
                pic_datas.append((pic_url,'png'))
            else:
                pic_datas.append((pic_url,'jpg'))
    return pic_datas

def address_translation(pic_data):
    """
    处理初步获取的地址
    """
    imgurl = pic_data.replace("//th.","//w.").replace("/small/","/full/")
    img_url_list = imgurl.split('/')
    img_url_list[-1] = 'wallhaven-' + img_url_list[-1]
    imgurl ='/'.join(img_url_list)
    if pic_data == 'png':
      imgurl = imgurl.replace('.jpg','.png')
    file_name = imgurl.split('/')[-1]
    return imgurl,file_name   

def save_image(data):
    """
    保存图片
    """
    imgurl,file_name = data
    image_dir = Path(__file__).parent.joinpath('wallhaven')
    image_dir.mkdir(parents=True,exist_ok=True)
    if not image_dir.joinpath(file_name).exists():
      r = get_response(imgurl)
      with open(image_dir.joinpath(file_name),'wb') as f:
            f.write(r.content)
            logger.info(f'图片:{file_name}\n保存路径:{image_dir}\n状态:下载完成')
    else:
      logger.warning(f'图片{file_name}已经下载,不能重复下载!')
      
def main(start_page,end_page):
    '''
    逻辑主函数
    '''
    _url = lambda num: f"https://wallhaven.cc/hot?page={num}"
    urls =
    for u in urls:
      list(map(save_image,))
      
if __name__ == '__main__':
    get_local_proxy()
    start_page,end_page = int(input('请输入起始页面:')),int(input('请输入终止页面:'))
    if start_page >= 1 and end_page <= 56:
      main(start_page, end_page)
    else:
      print('输入的页码超过限制,请重新输入,页码范围:1-56!')

jtq1234 发表于 2022-7-6 13:54

这个网站看多了要上瘾的。转兰州

下载:https://eva.lanzouj.com/ibTJt07g8ldg 密码:eva

13941700010 发表于 2022-7-13 16:35

感谢分享

dingdang1845 发表于 2022-7-6 13:56

很不错、

alfriend 发表于 2022-7-6 15:27

很好啊,下载很多优质图片

YukinoshitaKa 发表于 2022-7-13 15:50

感谢分享

erikgqp8645 发表于 2023-1-17 10:37

非常感谢楼主的分享,这个好用。

ws525776625 发表于 2023-1-18 09:21

怎么找到这个网址图片的页数

cjk0719 发表于 2023-2-27 16:47

感谢分享,我去尝试一下

hhnlovejy1314 发表于 2023-3-9 14:54

cjk0719 发表于 2023-2-27 16:47
感谢分享,我去尝试一下

怎么用啊。。。。。
页: [1]
查看完整版本: 【可双击运行】Wallhaven 热门壁纸下载程序