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

欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998       

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

目标网站:

    如果出现模块报错

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/779694.shtml

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

相关文章

OpenHarmony:全流程讲解如何编写ADC平台驱动以及应用程序

ADC(Analog to Digital Converter),即模拟-数字转换器,可将模拟信号转换成对应的数字信号,便于存储与计算等操作。除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接。 一、案例简介 该程序是基于…

Qt+OpenGL入门教程(二)——OpenGL渲染管线

渲染管线是图形学不可或缺的,在学习它之前,我们先了解一下什么是管线? 管线/流水线 当我们谈到管线时,我们指的是一个由多个阶段组成的过程,每个阶段都完成任务的一部分。在现实世界中,流水线的概念在许多…

【讲解下go和java的区别】

🔥博主:程序员不想YY啊🔥 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家💫 🤗点赞🎈收藏⭐再看💫养成习惯 🌈希望本文对您有所裨益,如有…

flume配置文件后不能跟注释!!

先总结:Flume配置文件后面,不能跟注释,可以单起一行写注释 报错代码: [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…

关于Linux中的history命令

前言:本文内容为实操学习记录,不具有调研价值,仅供参考! 正文: 接触过Linux操作系统的朋友一般都知道history命令,直接输入history命令,会显示当前用户的历史输入记录。这个原理是linux会记录我…

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中,checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加,加与不加从结果来看都一样,那在编译时和运行时各有什么区别呢? 示例代码一,test_01.cpp&…

ctfshow靶场sql注入wp

目录 web171 web172 web173 web174 web175 web176 web177-179 web180-183 web184 web185 web187 web190 web191 web192 web193 web194 web195 web196 web197 web199 web201 web202 web203 web204 web205 web206 web207 web208 web209 web210 web…

vscode调试Unity

文章目录 vscode调试UnityC#环境需求开始调试 Lua添加Debugger环境配置联系.txt文件配置Java环境 添加调试代码断点不生效的问题 vscode调试Unity C# 现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是&am…

VMware虚拟机更换引导顺序

前言 我用wmware装了黑群晖测试,将img转成vmdisk的格式之后发现系统引导盘之后1G,有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能,才能使用ss…

PLC_博图系列☞P=:在信号上升沿置位操作数

PLC_博图系列☞P:在信号上升沿置位操作数 文章目录 PLC_博图系列☞P:在信号上升沿置位操作数背景介绍P:在信号上升沿置位操作数说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 P 背景介绍 这是一篇关于PLC编程的文章…

DC-5靶机

一.环境搭建 1.下载地址 靶机下载地址:https://download.vulnhub.com/dc/DC-5.zip 2.虚拟机配置 切换nat模式,有问题全选重试和是,打到这了,我感觉这个配置我都不用写了,启动靶机如下图所示即可 二.开始渗透 1.信…

Few-short Learning笔记-1

Few short learning 用很少的样本进行分类或者是回归 support set:小的数据集(无法训练出深度神经网络) few short learning的目标是让机器自己学会学习。 few shot learning是一种meta learning(learn to learn) 举…

Rust编程(五)终章:查漏补缺

闭包 & 迭代器 闭包(Closure)通常是指词法闭包,是一个持有外部环境变量的函数。外部环境是指闭包定义时所在的词法作用域。外部环境变量,在函数式编程范式中也被称为自由变量,是指并不是在闭包内定义的变量。将自…

MySQL学习笔记------DCL

DCL Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限 一、管理用户 1、查询用户 USE mysql; select *from user; 2、创建用户 create user 用户名主机名 identified by 密码&a…

向机器人传授人类社会同步的艺术

在数字时代,社交机器人正迅速成为主流社会的一部分,从培训医生和教育儿童到提供谈话疗法和客户服务。现在,这是一个价值数十亿美元的全球产业,对具有类似人类社交智能的机器人的需求不断增长,这标志着我们技术史上的一…

Linux之冯诺依曼体系,操作系统,进程的理解,进程状态,以及进程的优先级

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.冯诺依曼体系 二.操作系统 2.1概念 2.2结构示意图&…

主流公链 - BCH BSV BTG

为什么出现分叉 BTC是自由的,BTC社区也是自由的,自然而然的会出现不同观点的群体 1. 比特币现金(Bitcoin Cash,BCH) 分叉日期: 2017年8月1日主要目的: 提高比特币的交易吞吐量和降低交易费用技术…

写作类AI推荐(一)

本章要介绍的写作AI如下: paperpal 特点: 面向科研人员的AI写作工具。可以选择自己的专业,如本科生/教授。 链接:Paperpal-专业AI论文润色与论文检测平台 笔灵 特点: 面向专业写作领域的AI写作工具。可以选择要写的文章…

人事管理系统|基于springboot人事管理系统的设计与实现(附项目源码+论文)

基于springboot人事管理系统的设计与实现 目录 基于springboot人事管理系统的设计与实现 一、摘要 二、相关技术 三、系统设计 3.1 整体功能结构图 3.2 功能具体细节设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取: 一、摘要 传统信息…

【ripro美化】全站美化包WordPress RiPro主题二开美化版sucaihu-childV1.9(功能集成到后台)

使用介绍 1、【宝塔】删除ripro文件,上传最新ripro版本,然后上传压缩包内的ripro里面的对应文件到ripro主题对应内覆盖(找到对应路径单个文件去覆盖)。 2、然后上传ripro-chlid子主题美化包到/wp-content/themes路径下 3、注意顺…