wallhaven.cc网站图片超清壁纸爬虫

2023-11-10

测试时间:2021-02-16

1.参考博客

From(侵删):
https://blog.csdn.net/qq_41849471/article/details/89607706

2.python代码

图片保存路径:
save_dir = ‘C:/Users/Administrator/Pictures/wallpaper/’
缩略图

pycharm直接运行即可下载到该目录,其他参数可参考上述博客。

import requests
from lxml import etree
import re
import os
import time

def get_pictures(url,folder_name,dest_count,c):
    html = requests.get(url)
    res = etree.HTML(html.content)
    img_url = res.xpath('//img[@id="wallpaper"]/@src')[0]
    img_name = img_url.split('/')[-1]
    try:
        img_html = requests.get(img_url)
        save_dir = 'C:/Users/Administrator/Pictures/wallpaper/' + folder_name
        if not os.path.exists(save_dir):
            os.mkdir(save_dir)
        
        with open(save_dir +'/'+img_name,'wb') as f:
            f.write(img_html.content)
        print("正在下载第 {} 张图片=====> ".format(c+1)+img_name+' -----success!')
        return 1
    except:
        print("正在下载第 {} 张图片=====> ".format(c+1)+img_name+' -----failure!')
        return 0


def get_next_url(url,folder_name,stars_num,dest_count,all):
    html = requests.get(url)
    res = etree.HTML(html.content)
    next_urls = res.xpath("//a[@class='preview']/@href")
    stars = res.xpath("//div[@class='thumb-info']/a[1]/text()")
    res_url = []
    sum = all
    for i in range(0,len(stars)):
        if int(stars[i])>=int(stars_num):
            res_url.append(next_urls[i])
    for i in res_url:
        sum += get_pictures(i,folder_name,dest_count,sum)
        if sum >= dest_count:
            exit("目标已达成!")
    if len(next_urls) == 0:
        print("无更多图片!")
        time.sleep(3)
        exit("0")
    return sum

if __name__ == "__main__":
    print("请选择获取方式:1.范围选择 2.关键词搜索 3.二者结合")
    # style = input()
    style = '1'
    categories = ['0','0','0']
    purity = ['0','0','0']
    url = ""
    keyword = ""
    sort_list = [
                 # 'https://wallhaven.cc/search?categories=101&purity=110&atleast=2560x1080&topRange=1M&sorting=toplist&order=desc&page={}',
                'https://wallhaven.cc/search?categories={}&purity={}&atleast=2560x1080&ratios=16x9&topRange=1M&sorting=toplist&order=desc&page={}'
                # ,'https://wallhaven.cc/search?q={}&categories={}&purity={}&sorting=date_added&order=desc&page={}'
        #, 'https://alpha.wallhaven.cc/search?q={}&categories={}&purity={}&resolutions=1920x1080&topRange=1M&sorting=toplist&order=desc&page={}',
        # 'https://alpha.wallhaven.cc/search?q={}&categories={}&purity={}&resolutions=1920x1080&sorting=random&order=desc&page={}',
        # 'https://alpha.wallhaven.cc/search?q={}&search_image=&page={}'
                 ]
    if style == '1' or style == '3':
        if style == '3':
            print("请输入搜索关键词(建议英文):")
            keyword = input().replace(' ','+')
        print("请选择图片类型:1.General 2.Anime 3.People (可多选,默认全选,空格分割选项)")
        # selection_str = input()
        selection_str = ''
        selection = selection_str.split()
        for i in selection:
            try:
                categories[int(i)-1] = '1'
            except:
                categories = ['1','1','1']

        print("图片附加选项:1.SFW 2.Sketchy (可多选,默认选择1,空格分隔选项,建议选择SFW)")
        # selection_str = input()
        selection_str = ''
        selection = selection_str.split()
        
        for i in selection:
            try:
                purity[int(i)-1] = '1'
            except:
                purity = ['1','0','0']
            purity[2] = '0'
        if selection_str == "":
            purity = ['1','1','0']

        print("请选择排序方式:1.Latest 2.Toplist 3.Random (单选,默认Random)")
        # selection_str = input()
        selection_str = '2'
        count = 1
        while selection_str != '1' and selection_str != '2' and selection_str != '3' and count <= 3 and selection_str != "":
            print("请正确选择(多次错误则默认选择)")
            selection_str = input()
            count += 1
        if count == 4:
            url = sort_list[2]
        elif selection_str == "":
            url = sort_list[2]
        else:
            # url = sort_list[int(selection_str)-1]
            url = sort_list[0]
    elif style == '2':
        print("请输入搜索关键词(建议英文):")
        keyword = input().replace(' ','+')
        url = sort_list[3]

    print("请输入文件夹的名称:")
    # folder_name = input()
    folder_name = 'wallhaven_wallpaper'
    while folder_name == "":
        folder_name = input()

    print("请输入最低的点赞数:")
    # stars_num = input()
    stars_num = 20

    print("请输入目标图片数量:")
    # dest_count = input()
    dest_count = 200

    all = 1 # 目前爬取的张数,用来控制下载张数

    for i in range(1,999):
        print('get the page: {}'.format(i))
        if style != '2':
            # print("getting from " + url.format(keyword,"".join(categories),"".join(purity),i))
            print("getting from " + url.format("".join(categories),"".join(purity),i))
            # all = get_next_url(url.format(keyword,"".join(categories),"".join(purity),i),folder_name,stars_num,int(dest_count),all)
            all = get_next_url(url.format("".join(categories),"".join(purity),i),folder_name,stars_num,int(dest_count),all)
        else:
            print("getting from " + url.format(keyword,i))
            all = get_next_url(url.format(keyword,i),folder_name,stars_num,int(dest_count),all)```




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wallhaven.cc网站图片超清壁纸爬虫 的相关文章

随机推荐

  • 计算机网络八股文

    浏览器输入一个网站后 具体发生了什么 进行DNS解析操作 根据DNS解析结果查找到服务器IP地址 通过IP寻址找到服务器 并利用三次握手建立TCP连接 浏览器生成HTTP保温 发送HTTP请求 等待服务器响应 服务器处理请求 返回服务器 根
  • 高速USB 2.0的CMSIS-DAP调试器:CMSIS-DAP正确打开方式(3月18日更新速度和稳定性)

    3月18日注 修改USB最大包长度到1024 HS支持 USB初始化前增加等待100ms CMSIS DAP Debugger 是 ARM 发布的面向 Cortex 系列 MCU 的开源 Apache 2 0协议 JTAG 与 SWD 调试
  • 解决github长期未登录,ssh keys过期的问题——git@github.com: Permission denied (publickey).

    首先声明 在我的PC端同时存在着github与gitlib的ssh keys 今天想看一个github上的项目 发现git pull的时候又permission denied了 如下图所示 处理办法很简单 只要把ssh key再加一遍就好了
  • 用于python环境下的数据操作_写给非计算机相关专业的同学——从零开始如何用python处理数据(包括如何安装环境)...

    文章目录 1 使用语言和包 1 2 pandas包的安装 这里只是一个例子 2 要做的一个数据处理 2 1 数据处理的需求 2 2 代码实现 2 2 1 思路 2 2 2 读入原来的表 2 2 3 找到速度为零的所有记录 2 2 4 找到对
  • 8、 Mac iTerm2 优化

    Mac iTerm2 优化 一 悬浮窗口 首先我们来解决第一个问题 如何在任何界面呼入呼出 iTerm2 的窗口 并且悬浮在界面的顶部 相信每个人都会有这样的使用场景 你正在全屏浏览器浏览网页 或者正在全屏编辑器写代码写文章之类的 突然想到
  • 使用ansible中的playbook

    1 Playbook 的功能 playbook 是由一个或多个 play 组成的列表 Playboot 文件使用 YAML 来写的 2 YAML 简介 YAML 是一种表达资料序列的格式 类似XML Yet Another Markup L
  • MySQL修改密码的3种方式以及启动方式

    在使用数据库时 我们也许会遇到 MySQL 需要修改密码的情况 比如密码太简单需要修改等 本节主要介绍了 3 种修改 MySQL 数据库密码的方法 使用 SET PASSWORD 命令 步骤 1 输入命令mysql u root p指定 r
  • xp无法访问查找工作组计算机,一招教你搞定XP“网上邻居”、“查看工作组计算机”打不开的情况...

    作 者 杜超 2号 ID 16058 城市 江阴 摘 要 一招教你搞定XP 网上邻居 查看工作组计算机 打不开的情况 正 文 在一些被优化过的XP系统或刚安装好的系统中 有时我们要访问局域网上的其他共享打印机或文件夹 需要用到网上邻居 可是
  • TCP协议疑难杂症全景解析

    原文地址 http blog csdn net dog250 article details 6612496 说明 1 本文以TCP的发展历程解析容易引起混淆 误会的方方面面 2 本文不会贴大量的源码 大多数是以文字形式描述 我相信文字看起
  • multiset和set,map和multimap的区别

    一 set和multiset的差异和相同 set是一个集合容器 其中所包含的元素是唯一的 集合中的元素按一定的顺序排列 元素插入过程是按排序规则插入 所以不能指定插入位置 set采用红黑树变体的数据结构实现 红黑树属于平衡二叉树 在插入操作
  • 查看GPU使用的最佳方式

    1 watch n 1 nvidia smi 最有名 没有之一 nvidia自带了一个nvidia smi的命令行工具 会显示GPU使用情况 作为监控 GPU 的工具就显得有点过于简陋了 比如 Process name 栏只显示命令行的程序
  • Redis布隆过滤器详解

    目录 一 前言 二 RedisBloom 安装与使用 三 RedisBloom 常用命令汇总 四 通过 Jedis 使用 RedisBloom 五 Redisson 封装的布隆过滤器 六 使用哪种方式的过滤器比较好 一 前言 布隆过滤器 B
  • 【数据结构与算法】时间复杂度与空间复杂度

    目录 一 前言 二 时间复杂度 1 概念 二 大O的渐进表示法 概念 总结 三 常见时间复杂度计算举例 例1 例2 例3 例4 例5 计算冒泡排序的时间复杂度 例6 二分算法的时间复杂度 例7 阶乘递归Fac的时间复杂度 例8 斐波那契递归
  • js异步提交form表单之serialize()方法及FormData对象

    serialize 和FormData对象都可将表单数据序列化 后通过ajax异步提交 但二者有实质区别 1 serialize serialize 是JQuery方法 可序列化表单值创建 URL 编码文本字符串 就是将表单数据以字符串的形
  • 浏览器的工作原理

    浏览器可以被认为是使用最广泛的软件 本文将介绍浏览器的工 作原理 我们将看到 从你在地址栏输入google com到你看到google主页过程中都发生了什么 将讨论的浏览器 今天 有五种主流浏览器 IE Firefox Safari Chr
  • java.lang.UnsatisfiedLinkError: No implementation found for

    E AndroidRuntime FATAL EXCEPTION main Process com example pimr PID 20314 java lang UnsatisfiedLinkError No implementatio
  • leecode刷题笔记-数组

    数组题注意事项 1 切记while循环的循环条件一定要判断遍历长度是否越界且要先判断该条件 否则就会报错 例如 while j
  • 50道编程小题目之【分解质因数】

    题目 将一个正整数分解质因数 例如 输入90 打印出90 233 5 python解题代码 ii int input 请输入一个正整数 jj 2 ii b ii fj while jj lt ii if ii jj 0 if ii jj f
  • linux下安装helm

    我这里使用的系统是centos7 6 Helm是一个kubernetes应用的包管理工具 用来管理charts 预先配置好的安装包资源 有点类似于Ubuntu的 apt 和CentOS中的 yum 方式一 使用官方提供的脚本一键安装 点击查
  • wallhaven.cc网站图片超清壁纸爬虫

    测试时间 2021 02 16 1 参考博客 2 python代码 1 参考博客 From 侵删 https blog csdn net qq 41849471 article details 89607706 2 python代码 图片保