【python】获取4K壁纸保存到本地文件夹【附源码】

        图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们高效地获取所需的图片资源。 

目标网站:

    如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple阿里云
https://mirrors.aliyun.com/pypi/simple/豆瓣
https://pypi.douban.com/simple/ 百度云
https://mirror.baidu.com/pypi/simple/中科大
https://pypi.mirrors.ustc.edu.cn/simple/华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

效果图:

代码详解:

  1. get_imgurl_list(url, imgurl_list) 函数用来获取指定页面中的图片链接,并将这些链接存储在 imgurl_list 列表中。

    • 使用 requests.get(url=url, headers=headers) 发起请求获取页面内容。
    • 使用 etree.HTML(html_str) 将页面内容转换为 etree 对象,方便后续使用 XPath 进行解析。
    • 通过 XPath 定位到图片链接,并添加到 imgurl_list 中。
  2. get_down_img(imgurl_list) 函数用来下载图片到本地存储。

    • 创建名为 "美女" 的文件夹用于存储下载的图片。
    • 遍历 imgurl_list 中的图片链接,逐个下载图片并保存到本地文件夹中。
  3. if __name__ == '__main__': 部分:

    • 设置需要爬取的页数 page_number = 10
    • 循环构建每一页的链接,如 https://www.moyublog.com/95-2-2-{i}.html
    • 调用 get_imgurl_list() 函数获取图片链接。
    • 调用 get_down_img() 函数下载图片到本地。

代码流程:

  1. 导入必要的库和模块:
import requests  # 用于发送HTTP请求
from lxml import etree  # 用于解析HTML页面
import time  # 用于控制爬取速度
import os  # 用于文件操作
  1. 定义函数get_imgurl_list(url, imgurl_list)用于获取图片链接:
def get_imgurl_list(url, imgurl_list):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}response = requests.get(url=url, headers=headers)html_str = response.texthtml_data = etree.HTML(html_str)li_list = html_data.xpath("//ul[@class='clearfix']/li")for li in li_list:imgurl = li.xpath(".//a/img/@data-original")[0]imgurl_list.append(imgurl)
  • 发送GET请求获取网页内容。
  • 将网页内容转换为etree对象以便后续使用xpath进行解析。
  • 使用xpath定位所有的li标签,并遍历每个li标签获取图片链接,将链接添加到imgurl_list列表中。
  1. 定义函数get_down_img(imgurl_list)用于下载图片:
def get_down_img(imgurl_list):os.mkdir("美女")n = 0for img_url in imgurl_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}img_data = requests.get(url=img_url, headers=headers).contentimg_path = './美女/' + str(n) + '.jpg'with open(img_path, 'wb') as f:f.write(img_data)n += 1
  • 创建名为"美女"的目录用于存放下载的图片。
  • 遍历图片链接列表,逐个发送GET请求下载图片数据,并将图片写入本地文件。每张图片以数字编号命名。
  1. 主程序部分:
if __name__ == '__main__':page_number = 10  # 爬取页数imgurl_list = []  # 存放图片链接for i in range(0, page_number + 1):url = f'https://www.moyublog.com/95-2-2-{i}.html'print(url)get_imgurl_list(url, imgurl_list)get_down_img(imgurl_list)
  • 设定要爬取的页数page_number为10。
  • 初始化存放图片链接的列表imgurl_list
  • 循环构建每一页的链接并调用get_imgurl_list()函数获取图片链接。
  • 最后调用get_down_img()函数下载图片到本地"美女"文件夹。

为什么我们在获取数据的过程中需要用到IP池

  1. 应对反爬虫策略:许多网站会采取反爬虫措施,限制单个IP的访问频率或次数。通过使用数据获取服务,可以轮换多IP来模仿多个用户访问,降低被封禁的风险。

  2. 保证稳定性:有些数据获取服务可能存在不稳定的情况,包括IP连接速度慢、IP被找到等问题。通过建立数据获取服务,可以预先准备多个可用的IP地址,确保程序在某个IP不可用时可以快速切换到其他可用IP,提高爬虫程序的稳定性。

  3. 提高访问速度:IP池中的多个IP地址可以并发使用,实现多线程或异步请求,从而加快数据获取速度。通过在数据获取服务中保持一定数量的可用IP地址,可以实现更快速的数据抓取。

  4. 应对封禁风险:有些网站会根据某些特定的IP地址或IP段进行封禁,如果整个IP池中的IP都被封禁,可以及时更新IP池中的IP地址,避免影响爬虫程序的正常运行。

  5. 降低被识别的风险:当爬虫程序使用固定的IP地址进行访问时,容易被网站识别出是爬虫行为。

 完整代码:

        

import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒
import os
def get_imgurl_list(url, imgurl_list):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}# 发送请求response = requests.get(url=url, headers=headers)# 获取网页源码html_str = response.text# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath("//ul[@class='clearfix']/li")# 打印一下li标签个数看是否和一页的电影个数对得上print(len(li_list))  # 输出20,没有问题for li in li_list:imgurl = li.xpath(".//a/img/@data-original")[0]print(imgurl)# 写入列表imgurl_list.append(imgurl)
def get_down_img(imgurl_list):os.mkdir("美女")n = 0for img_url in imgurl_list:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}img_data = requests.get(url=img_url, headers=headers).content  ## 拼接图片存放地址和名字img_path = './美女/' + str(n) + '.jpg'# 将图片写入指定位置with open(img_path, 'wb') as f:f.write(img_data)# 图片编号递增n = n + 1if __name__ == '__main__':page_number = 10  # 爬取页数imgurl_list = []  # 存放图片链接# 1. 循环构建每页的链接for i in range(0, page_number + 1):# 页数拼接url = f'https://www.moyublog.com/95-2-2-{i}.html'print(url)# 2. 获取图片链接get_imgurl_list(url, imgurl_list)# 3. 下载图片get_down_img(imgurl_list)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网云组态是什么?部署物联网云组态有什么作用?

在信息化与工业化的深度融合进程中,物联网云组态以其独特的优势,正在成为企业数字化转型的重要工具。那么,物联网云组态究竟是什么呢?部署物联网云组态又能给企业带来哪些实质性的好处呢?今天,我们将围绕这…

vue 消息左右滚动(前后无缝衔接)

之前一直用vue-seamless-scroll,无奈此组件有两个缺点不满足实际效果:1)标题过长被截取、2)标题果断也会滚动,无奈我自己封装一个,满足此两个弊端,也能达到vue-seamless-scroll组件的功能&#…

AI:Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略

AI:Nvidia官网人工智能大模型工具合集(文本生成/图像生成/视频生成)的简介、使用方法、案例应用之详细攻略 目录 Nvidia官网人工智能大模型工具合集的简介 1、网站主要功能包括: Nvidia官网人工智能大模型工具合集的使用方法 1、SDXL-Turbo的使用 2、GEMMA-7B的…

详解 net user

net user 是 Windows 操作系统自带的一个命令行工具,用于管理和查询本地用户账户信息。在域环境中,它可以用于管理本地用户账户,但对域用户账户的操作能力有限,尤其是查看域账户锁定状态等功能。以下是 net user 命令的详解&#…

【学习】Web安全测试需要考虑哪些情形

一、数据加密 某些数据需要进行信息加密和过滤后才能在客户端和服务器之间进行传输,包括用户登录密码、信用卡信息等。例如,在登录某银行网站时,该网站必须支持SSL协议,通过浏览器访问该网站时,地址栏的http变成https…

中国中药有限公司邀您到场参观2024燕窝滋补品展

参展企业介绍 中国中药有限公司是中国医药集团有限公司(简称“国药集团”)的全资子公司,是国药集团中药产业板块的核心投资平台,也是中药一类新药、中药科技进步一等奖、中药保密品种——“人工麝香”全国总代理。 公司经营范围…

Python装饰器深度解析:提升代码效率与可读性的实战指南

Python装饰器深度解析:提升代码效率与可读性的实战指南 摘要装饰器简介定义及基本用途装饰器在Python中的角色 装饰器的工作原理Python函数的运行时特性首个装饰器示例:简单函数计时装饰器的执行流程解析 使用装饰器增强函数功能编写可重用的日志记录装饰…

AI论文速读 | 具有时间动态的路网语义增强表示学习

论文标题: Semantic-Enhanced Representation Learning for Road Networks with Temporal Dynamics 作者: Yile Chen(陈亦乐) ; Xiucheng Li(李修成); Gao Cong(丛高) ; Zhifeng Ba…

web前端性能优化【多年工作经验总结,一举拿下】

浏览器方面: 减少HTTP请求 HTTP 请求是指客户端(例如浏览器)向服务器发出的请求消息,用于获取特定资源或执行特定操作 为什么能够优化性能? 减少网络延迟:每次发起HTTP请求都需要经过网络传输&#xff…

openlayers 入门教程(五):sources 篇

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

利用云手机技术,开拓海外社交市场

近年来,随着科技的不断进步,云手机技术逐渐在海外社交营销领域崭露头角。其灵活性、成本效益和全球性特征使其成为海外社交营销的利器。那么,究竟云手机在海外社交营销中扮演了怎样的角色呢? 首先,云手机技术能够消除地…

UE4 根据任意多个点,生成最近的线条

1.计算所有线条的组合 2.Clear0宏:清除掉数组Distance0的值。注意这里是设置成最大值,而不是使用Clear! 3.清除掉数组中的最小值,避免重复生成相同长度的线条。注意这里是设置成最大值,而不是使用Clear! …

接口关联和requests库

一、接口关联 postman的接口 postman的接口关联配置:js代码,重点在于思路。 // 定义jsonData这个变量 接受登录接口的返回结果 var jsonData JSON.parse(responseBody); // 从返回结果里提取token/id值,并赋值给token/id变量值作为环境变…

如何添加随机种子保证代码每次复现的一致性?

如何添加随机种子保证代码每次复现的一致性? 在main()程序中首先设定随机种子: def set_seed(seed42):os.environ[PYTHONHASHSEED] str(seed)random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.backends…

Spark基于DPU Snappy压缩算法的异构加速方案

一、总体介绍 1.1 背景介绍 Apache Spark是专为大规模数据计算而设计的快速通用的计算引擎,是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越。换句话说&am…

Java毕业设计 基于SSM网上二手书店系统

Java毕业设计 基于SSM网上二手书店系统 SSM jsp 网上二手书店系统 功能介绍 用户:首页 图片轮播 图书查询 图书分类显示 友情链接 登录 注册 图书信息 图片详情 评价信息 加入购物车 资讯信息 资讯详情 个人中心 个人信息 修改密码 意见信息 图书收藏 已经付款 邮…

数据仓库的魅力及其在企业中的应用实践

数据仓库,这一创新性的概念来自于比尔恩门,从1980年代末提出以来,便凭借其独特的架构设计和强大的数据处理能力,在全球商业领域中掀起了一场革命。它不仅是解决企业海量数据存储和查询需求的关键技术,更是推动企业实现…

rel=“dns-prefetch“和rel=“preconnect“ 结合使用,以及link属性的详细介绍

使用 dns-prefetch DNS-prefetch 尝试在请求资源之前解析域名。这可能是后面要加载的文件,也可能是用户尝试打开的链接目标。 为什么要使用 dns-prefetch? 当浏览器从(第三方)服务器请求资源时,必须先将该跨源域名解…

从人工智能入门到理解ChatGPT的原理与架构的第一天(First)(含机器学习特征工程详解)

目录 一.ChatGPT的发展历程 二.Attention is all you need 三.对于GPT-4的智能水平评估 四.大语言模型的技术演化 1.从符号主义到连接主义 2.特征工程 2.1数据探索 2.2数据清洗 2.3数据预处理 2.3.1无量纲化 2.3.1.1标准化 2.3.1.2区间缩放法 2.3.1.3标准化与归一…

李宏毅深度强化学习导论——策略梯度

引言 这是李宏毅老师深度强化学习视频的学习笔记,主要介绍策略梯度的概念,在上篇文章的末尾从交叉熵开始引入策略梯度。 如何控制你的智能体 上篇文章末尾我们提到了两个问题: 如何定义这些分数 A A A,即定义奖励机制&#xff…