Python爬虫实战 — — Wallhaven壁纸高清原图下载

  • 一、网站分析
  • 二、可行性分析
  • 三、代码分析
    • 1.所需第三方库与请求头
    • 2.获取当前页的所有壁纸图像链接
    • 3.根据图像链接存储本地
    • 4.最终代码
  • 四、个人建议
  • 五、结果检验

一、网站分析

目标网址:https://wallhaven.cc/toplist

页面向下滑动,很容易会发现该网站的一些特点:
1.每页壁纸的数量是固定的,为24张
2.在向下滑动过程中,由于加载出其他页数的壁纸,浏览器顶部的网址也会发生改变


二、可行性分析

观察网站结构、反爬机制等,检测是否可以进行爬虫

  • 获取单张壁纸的网址:在单张壁纸上右击“检查”,便可以定位到目标网站的超链接网址
    标签a中的属性href的值
    —— 测试用例:https://wallhaven.cc/w/pky5mm
  • 获取当前壁纸的图像链接:类似于上一步骤,在壁纸上右击“检查”,便可以定位到该图像链接
    标签img中的属性src的值
    ——测试用例:https://w.wallhaven.cc/full/pk/wallhaven-pky5mm.jpg
  • 成功获取图像链接,爬虫可行!

三、代码分析

1.所需第三方库与请求头

import requests
import time
from lxml import etreeheaders = {# 参数UA,用以模拟浏览器向服务器发送请求'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31',# 参数cookie,用以登录图片网站,可获取NSFW类型的图片# 'cookie': '(填入自己的cookie地址)',
}

2.获取当前页的所有壁纸图像链接

def get_urls(__page__):# 初始化一个空列表,用以存储壁纸的图像链接src_urls = []# 根据页码不同,定制不同的URLbase_url = 'https://wallhaven.cc/toplist'if page == 1:list_url = base_urlelse:# 根据不同的页面选择添加不同的连接符list_url = base_url + "?page=" + str(page)# 获取壁纸集URL的请求对象list_request = requests.get(url=list_url, headers=headers)# 根据xpath语法,获取单个壁纸的URL的列表list_tree = etree.HTML(list_request.text)list_urls = list_tree.xpath('//a[@class="preview"]/@href')# 循环该壁纸列表for img_url in list_urls:# 获取当前壁纸的图像链接的请求对象img_request = requests.get(url=img_url, headers=headers)# 根据xpath语法,获取当前壁纸的图像链接,并添加至src_list中img_tree = etree.HTML(img_request.text)j = img_tree.xpath('//img[@id="wallpaper"]/@src')[0]src_urls.append(j)return src_urls

3.根据图像链接存储本地

def save_img(__url__):# 获取传入的参数url的请求对象request = requests.get(url=url, headers=headers)# 由于图像链接中包含图像名称的信息,可将图像名称分离出来name = str(url)[-20:]# 存储于本地wallhaven文件夹中with open('./wallhaven/' + name, "wb") as fp:fp.write(request.content)fp.close()

4.最终代码

整理之后的代码如下:

import requests
import time
from lxml import etreeheaders = {# 参数UA,用以模拟浏览器向服务器发送请求'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31',# 参数cookie,用以登录图片网站,可获取NSFW类型的图片# 'cookie': '(填入自己的cookie地址)',
}# 可使用代理ip,防止自身ip被封
# proxy = {'https': 'https://101.200.185.203:16818'}def get_urls(__page__):# 初始化一个空列表,用以存储壁纸的图像链接src_urls = []# 根据页码不同,定制不同的URLbase_url = 'https://wallhaven.cc/toplist'if page == 1:list_url = base_urlelse:# 根据不同的页面选择添加不同的连接符list_url = base_url + "?page=" + str(page)# 获取壁纸集URL的请求对象list_request = requests.get(url=list_url, headers=headers)# 根据xpath语法,获取单个壁纸的URL的列表list_tree = etree.HTML(list_request.text)list_urls = list_tree.xpath('//a[@class="preview"]/@href')# 循环该壁纸列表for img_url in list_urls:# 获取当前壁纸的图像链接的请求对象img_request = requests.get(url=img_url, headers=headers)# 根据xpath语法,获取当前壁纸的图像链接,并添加至src_list中img_tree = etree.HTML(img_request.text)j = img_tree.xpath('//img[@id="wallpaper"]/@src')[0]src_urls.append(j)return src_urlsdef save_img(__url__):# 获取传入的参数url的请求对象request = requests.get(url=url, headers=headers)# 由于图像链接中包含图像名称的信息,可将图像名称分离出来name = str(url)[-20:]# 存储于本地wallhaven文件夹中with open('./wallhaven/' + name, "wb") as fp:fp.write(request.content)fp.close()if __name__ == '__main__':# 获取起始页码与结束页码start_page = int(input('Please input the starting page:'))end_page = int(input('Please input the ending page:'))print('Start the download...')for page in range(start_page, end_page + 1):# 获取单个壁纸的图像链接for url in get_urls(page):print(url)# 将该壁纸存储本地save_img(url)# 每存储一张图片,休眠10秒# time.sleep(10)# 每存储一页图片,休眠15秒# time.sleep(15)print('The download has completed.')

四、个人建议

  1. 采用代理或者代理池,不仅提高爬取速率,也能尽量保证自身IP地址安全
  2. 当仅用一个代理或者自身IP访问时,间隔的休眠时间是必要的,否则会报异常
  3. 注意爬取页面的连接符,有的是"?“有的是”&"
  4. 登录wallhaven网站后,可以看到NSFW类型的壁纸
  5. 不使用cookie参数时,只能下载SFW类型的壁纸;使用cookie参数时,可以下载所有类型的壁纸

如何获取cookie参数 ?

登录账号的情况下,右击“检查”,选择network,在响应列表里查找带cookie参数的,(如果响应列表为空,点击刷新即可)将cookie的值复制过来,以字典的形式保存在headers中


五、结果检验

确实很妙!嘿嘿,全是高清壁纸嗷~

注:有可能会出现壁纸只下了上半截的情况,这是由于网速不够 →_→

Python爬虫实战 — — Wallhaven壁纸高清原图下载相关推荐

  1. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  2. 【第1篇】Python爬虫实战-王者荣耀高清壁纸下载

    目标网址:https://pvp.qq.com/web201605/wallpaper.shtml 目录 1.页面分析 2.程序源码 3.结果展示 1.页面分析 通过F12打开浏览器控制台,刷新一下页 ...

  3. 知乎高清原图下载python极简脚本

    1.脚本,注意修改保存目录和爬取链接 # 爬取的知乎文字 #本例爬取 <已续更wlop鬼刀高清壁纸系列4K8K都有不多说看图全知乎放上来最多最好的好吧✧*.٩(ˊωˋ*)و✧*鬼刀wlop> ...

  4. BAYC猿壁纸 - 立体时尚猿,附高清原图下载

    小伙伴们注意:公众号的推送机制不再按照时间前后推送了,微信公众号信息流乱序.君哥建议大家把科技毒瘤君公众号置顶(设为星标⭐),以便第一时间看到推送,非常感谢~,方法如下图: 手机壁纸 - 图片来自网络 ...

  5. python爬虫之抓取高清壁纸

    对于很多电脑玩家喜欢给自己电脑装饰精美的壁纸,但是碍于图片大小清晰度等原因无法找到合适的,今天我就利用爬虫技术手段,现实高清壁纸抓取,需要的小伙伴可以一起过来看看! # coding=utf-8imp ...

  6. python爬虫爬取海量高清图片,小白都能学习的简单操作

    正文 目标网站divinl 首先看看这网站是怎样加载数据的; 打开网站后发现底部有下一页的按钮,ok,爬这个网站就很简单了; 日文的 我们目标是获取每张图片的高清的源地址,并且下载图片到桌面; 先随便 ...

  7. 2021.5.22 Python爬虫实战:效率办公,从下载文献开始...

    在百度学术中,当我们查找论文原文时,需要知道该论文的DOI(Digital Object Identifier),通过它可以方便.可靠地链接到论文全文.但是,如果我们所需查找的同主题论文数目繁多,这时 ...

  8. 电气设计常用提示图标(自己画的)含高清原图下载地址

    1-1.不可循环利用/不可回收 1-2.可循环利用/可回收 1-3.静电敏感/ESD 1-4.注意高温/注意烫伤  1-5.有电危险/注意危险  1-6.高压危险 链接: https://pan.ba ...

  9. 《SEO实战密码》高清电子版PDF下载地址(SEO学习必备)

    最近想看一些SEO系统性的知识,网上各种SEO软文,看来看去,都没有什么深入的了解,于是网上搜书好久,最终还是豆瓣排名第一的<SEO实战密码>让我觉得非常好,最后找到了该书的电子版,放到我 ...

最新文章

  1. 编译-C语言库FFTW支持iOS平台的静态库
  2. uniapp H5页面嵌入微信小程序 ios 下 video组件 播放视频 设置 border-radius overflow:hidden 不生效
  3. 使用 Visual Studio Code SQLite 扩展来浏览 SAP Cloud Application Programming 数据库
  4. typescript 接口 interface 的理解
  5. 带你自学Python系列(三):列表遍历(for循环)
  6. OpenShift 4 之Knative(2) - 第一个Serverless应用
  7. C语言 FileStreaming(文件流)
  8. 组装r730服务器,戴尔poweredge r730服务器配置及系统安装详解教程
  9. 如何在回调中访问正确的“ this”?
  10. V8 JavaScript 引擎 6.6 发布,异步性能大幅提升
  11. CodeForces - 274B Zero Tree
  12. 100个最常用的PHP函数(建议收藏)
  13. 那些想上天的亿万富翁,开启了新的“太空竞赛”
  14. openshift operator 介绍
  15. 避坑指南:Kafka集群快速扩容的方案总结
  16. 如何利用SUM函数合并单元格求和
  17. ISP pipeline之lens shading correction
  18. 【swaggo】swaggo使用详解
  19. 计算机网络:划分子网和构造超网
  20. 深入Windows开发--Preview and Thumbnail

热门文章

  1. 2022/11/4电子体温计方案_单片机
  2. 演示7:python钟表绘制
  3. 使用log4js打印日志
  4. Nginx-学习nginx这一篇就够了、版本平滑升级
  5. 何为Equal Error Rate(EER)
  6. 电子邮箱免费注册,2021年投简历用什么邮箱好?
  7. RBO 和CBO分析
  8. es对日志数据进行索引生命周期管理
  9. NGUI与新版Prefab系统冲突问题
  10. java批量下载为zip