简单爬取wallpaper heaven高清壁纸(福利满满~)
简单爬取wallpaper heaven高清壁纸
2021年1月30日更新
由于网站架构更改,以下内容已经并不能再实现爬取
思路大体不变,仅供参考思路
前言:wallpaper heaven是一个拥有百万高清壁纸的网站,其壁纸质量极佳,像我这种懒得用壁纸软件的人,便决定从该网站爬些图片,用来动态切换当作壁纸
文章目录
- 简单爬取wallpaper heaven高清壁纸
- URL分析
- 程序设计
- 代码实现
URL分析
首先看页面
我们随意点击后查看网址
https://alpha.wallhaven.cc/search?q=&categories=111&purity=100&sorting=random&order=desc
随机尝试对比后发现,q=
后面加关键词即可达到搜索效果,
categories=111
后面的三个数字即对应了General Anime People
三个选项,选中为1,不选为0,
purity=100
后面虽然有三个数字,但是只有前两个有用,对应SFW Sketchy
,这里的SFW
是safe for work
(如果你主要想看福利图片,不勾选这个选项即可),选中出现的是可以在工作时浏览的图片(不选中出现的图片,你懂的),Skectchy
是写真的意思
sorting
指结果相关度,参数有random
、toplist
等
order
指结果排序,有升序和降序两个参数
当然远不止这些参数,还有分辨率,颜色,比例等等,我这里就不赘述了,可以自行尝试
还有非常重要的一点,就是翻页
该网址的翻页很方便,网址后面加一个page
参数即可(&page=2
即第二页)
程序设计
右击查看元素之后,我们即可获取到该图片的定位,但是定位到的url仅仅只是图片的缩略图,如果要爬取高清大图,我们还需要再进入一层链接
于是整体思路就出来了,先构建url,爬取每页的图片的详情页的网址,获取详情页的网址后进入详情页并获取高清大图的链接,进行爬取
因为并不是所有的图片都是符合我们预期的,为了能让结果更加贴合我们的心意,我们再设置两个参数,一个是星星数量(如下图),每张图片都是有人点赞的,其体现就在于星星的数量,我们只爬取高于一定数量的星星
我们只是为了爬取一定量的图片,并非是全网爬取,所以我们还需要设置一个数量参数,进行限制
程序的流程图大概是这样
代码实现
有了如上的思路之后,代码实现就相对简单了,因为是想实现一个小工具,所以代码里面添加了许多交互的内容,这样也便于封装
代码实现相对简单,这里便不再细讲代码了,可能有写的累赘的地方,且并未太注意细节,代码的鲁棒性不是太强,正在写UI界面,会在新版本中增强鲁棒性
利用pyinstaller这个库可以实现代码的封装,生成exe
github地址
对您有些帮助的话记得点个赞哦~
以下是代码
import requests
from lxml import etree
import re
import os
import timedef 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("https:"+img_url)if not os.path.exists(folder_name):os.mkdir(folder_name)with open('./'+folder_name+'/'+img_name,'wb') as f:f.write(img_html.content)print("正在下载第 {} 张图片=====> ".format(c+1)+img_name+' -----success!')return 1except:print("正在下载第 {} 张图片=====> ".format(c+1)+img_name+' -----failure!')return 0def 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 = allfor 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 sumif __name__ == "__main__":print("请选择获取方式:1.范围选择 2.关键词搜索 3.二者结合")style = input()categories = ['0','0','0']purity = ['0','0','0']url = ""keyword = ""sort_list = ['https://alpha.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 = 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 = 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','0','0']print("请选择排序方式:1.Latest 2.Toplist 3.Random (单选,默认Random)")selection_str = input()count = 1while selection_str != '1' and selection_str != '2' and selection_str != '3' and count <= 3 and selection_str != "":print("请正确选择(多次错误则默认选择)")selection_str = input()count += 1if count == 4:url = sort_list[2]elif selection_str == "":url = sort_list[2]else:url = sort_list[int(selection_str)-1]elif style == '2':print("请输入搜索关键词(建议英文):")keyword = input().replace(' ','+')url = sort_list[3]print("请输入文件夹的名称:")folder_name = input()while folder_name == "":folder_name = input()print("请输入最低的点赞数:")stars_num = input()print("请输入目标图片数量:")dest_count = input()all = 0 # 目前爬取的张数,用来控制下载张数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))all = get_next_url(url.format(keyword,"".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)
简单爬取wallpaper heaven高清壁纸(福利满满~)相关推荐
- python爬取王者_python 爬取王者荣耀高清壁纸
一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 预览一下桌面吧: 是不是看着这样的桌面也很带感,_ (学会这个技术,你可以爬取其他网站的类似图片 ...
- python 爬取王者荣耀高清壁纸
代码地址如下: http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...
- python爬虫爬取必应每日高清壁纸
python爬虫爬取必应每日高清壁纸 一.简介 二.使用的环境 三.网页分析 1.分析网页每一页url形式以及总页数 2.网页重要信息收集 3.在源码中寻找所需信息的位置 四.代码实现 五.运行爬虫 ...
- Python多线程爬虫之二:爬取王者荣耀高清壁纸(多线程)
一.项目分析 1.查询爬取网址 robots 权限 1.王者荣耀官网:https://pvp.qq.com/ 2.访问王者荣耀官网 rbots 权限: https://pvp.qq.com/robot ...
- python多线程爬取王者荣耀高清壁纸过程
多线程与爬虫 目标url json中查找url 访问url 读取json 查看json的list数组 全部图片 粗暴的单线程获取 多线程执行 目标url 查看http://pvp.qq.com/web ...
- Python爬虫实战| Python爬取英雄联盟高清壁纸
先看一下最终爬取的效果,每个英雄的壁纸都被爬取下来了: "黑暗之女 安妮"的12张壁纸: 高清大图: 下面开始正式教学! 版本:Python 3.5 工具:Jupyter note ...
- Python爬虫入门-scrapy爬取唯一图库高清壁纸
首先,就是进入到唯一图库,点击上面的高清壁纸项目: 进入之后,下拉,发现是正常的下拉没有Ajax加载,拉到最后面点击末页,可以看出这个栏目里面总共有292页: 翻页看一下URL有什么变化,可以发现只有 ...
- 如何爬取王者荣耀高清壁纸(详细分析教程)
1.准备工作 Python 3.7 Python安装有requests模块 王者荣耀官网地址:https://pvp.qq.com/web201605/wallpaper.shtml### 2.网站分 ...
- Python爬虫实战 使用线程池批量爬取必应1080P高清壁纸
本文纯粹为了技术学习,内容如有侵权,请告知! 目标URL:https://bing.ioliu.cn 爬取的图片 Python用到的主要模块 import requests from lxml imp ...
最新文章
- 保护了无数医护人员的N95口罩,原来是华裔科学家和一位学生共同发明的!
- 使用DML语句【weber出品必属精品】
- 【Flask项目】项目准备之-创建模块的蓝图
- 静态链接库LIB和动态链接库DLL的区别 创建和示例
- Loj #149. 01 分数规划(01分数规划模板题)
- 项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图
- (1)FPGA面试题Setup和Holdup时间
- Filter过滤器的生命周期
- 所有的 iPhone 和高端 Android 设备都被破解了!
- php测线路网速,php 测试网速
- 服务器安全值得深思的几点问题?
- JTS Java空间几何计算、距离、最近点、subLine等计算
- 瞻博网络持续深耕 以“本土化”撬动“中国心”
- 边云协同的优点_与云端握手 是时候谈谈边云协同这个边缘计算新风向了
- 京东回应显卡售后传闻;​IBM发布第一个2纳米芯片;苹果以工程师数量评估收购对象 | EA周报...
- 如何解决未能初始化战场服务器,解决绝地求生无法初始化steam教程详解
- CVPR 2019 Oral 论文精选汇总,值得一看的 CV 论文都在这里(持续更新中)
- [系统相关]WPS Office 2016 专业增强版 10.8.0.6470 免序列号无限制
- 计算机程序扩展名是什么,c语言源程序的扩展名是什么?
- Linux与几种电脑系统的区别