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

news2024/10/11 10:24:24

欢迎来到英杰社区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.text
    html_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 = 0
    for 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 += 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 = 0
    for 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 + 1


if __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.coloradmin.cn/o/1553958.html

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

相关文章

C#_泛型_委托

文章目录 泛型泛型的使用泛型的约束委托委托的实例化多播委托委托的调用内置委托类型委托练习泛型委托Lambda表达式(进阶)上期习题答案本期习题 泛型 泛型(Generic) 是一种规范,它允许我们使用占位符来定义类和方法,编译器会在编…

多模态检索增强生成的简单介绍

原文地址:An Easy Introduction to Multimodal Retrieval Augmented Generation 2024 年 3 月 20 日 如果检索增强生成(RAG) 应用程序可以处理多种数据类型(表格、图形、图表和图表)而不仅仅是文本,那么它的实用性就会呈指数级…

【能省则省】搭建网站仅50/年 云服务器选择建议 程序员职场刚需云产品 附最新价格对比表

《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 2024-开年采购活动 云服务器专区 京东云 阿里云 腾讯云 配置最新价格表 与 官方活动地址 ​ 当前活动…

Docker进阶:Docker Swarm(集群搭建) —实现容器编排的利器

Docker进阶:Docker Swarm(集群搭建) —实现容器编排的利器 1、什么是Docker Swarm?2、Docker Swarm 与 Docker Compose的区别3、创建一个Swarm集群(1-Manager,2-Worker)1、资源准备2、初始化Swa…

机器人姿态估计-IMU、互补滤波算法应用

机器人姿态估计-IMU、互补滤波算法应用 附赠自动驾驶学习资料和量产经验:链接 机器人的姿态测量对于许多应用至关重要,如导航、运动控制等。在这篇文章中,我们将介绍如何利用MPU6050传感器以及互补滤波和卡尔曼滤波算法来实现自平衡车的姿态…

vue 实现自定义分页打印 window.print

首先这里是我自定义了打印界面才实现的效果,如果不用自定义界面实现,应该是一样的吧。具体可能需要自己去试试看 我的需求是界面有两个表格,点击全部打印,我需要把第一表格在打印是第1页,第二个表格是第二页 如图&…

二十二、软考-系统架构设计师笔记-真题解析-2018年真题

软考-系统架构设计师-2018年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统…

ensp中pc机访问不同网络的服务器

拓扑图如下,资源已上传 说明:pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段,192.168.2.0网段和192.168.3.0网段,在未配置的情况下,pc设备是访问不到server的 具体操作流程 第一;pc设备…

C# 操作 Word 全域查找且替换(含图片对象)

目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 关于全域查找且替换 C#全域操作 Word 查找且替换主要包括如下…

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

QT数据类型和容器用法

Qt库提供了基于通用模板的容器类, 这些类可用于存储指定类型的数据项,Qt中这些容器类的设计比STL容器更轻,更安全且更易于使用。容器类也都是隐式共的,它们是可重入的,并且已针对速度/低内存消耗和最小的内联代码扩展进行了优化&a…

RabbitMQ基础笔记

视频链接:【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.初识MQ1.1.同步调用1.2.异步调用1.3.技术选型 2.RabbitMQ2.1.安装2.1.1 Docker2.1.1 Linux2.1.1 Windows 2.2.收发消息2.2.1.交换机2.2.2.队列2.2.3.绑定关系2.2.4.发送消息 2.3.数据隔离2.3.1.用户管理2…

Elasticsearch:语义搜索即服务处于卓越搜索的中心

作者:来自 Elastic Sherry Ger, Stephen Brown 对于许多企业来说,搜索卓越中心(center of excellence - COE)向其用户提供搜索服务,从不同的数据源中整理知识,并将搜索功能集成到其内部和外部应用程序中。…

神策数据参与制定首份 SDK 网络安全国家标准

国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告(2023 年第 13 号),全国信息安全标准化技术委员会归口的 3 项国家标准正式发布。其中,首份 SDK 国家标准《信息安全技术 移动互联网应用程序&#xff0…

如何配置本地ssh连接远程Linux服务器

1.条件 本地操作系统Ubuntu远程服务器(Linux都可以) 本地如果是Window,其实也一样,但是需要先下载ssh和putty工具,然后操作步骤是一样的 2.生成ssh公私钥对 # 在本地重新生成SSH公私钥对非常简单,在你的命令行终端&a…

词令关键词口令直达工具:打开「词令」输入关键词直达口令怎么使用?

词令是一款关键词口令直达工具;使用词令关键词口令直达工具,输入指定的词令关键词直达口令,搜索直达该词令关联的网站、页面、程序、应用、服务或功能等等,实现一键直达目标,避免繁琐的查找点击行为,提高用…

报错 /core/library/think/cache/driver/File.php 第 126 行左右(已解决)

报错 /core/library/think/cache/driver/File.php 第 126 行左右 解决方法: 网站后台版本低于v1.5.2出现的缓存问题,如果无法登录后台了,就通过FTP,把 /data/runtime 里的都删掉,然后进后台升级到最新版 一、进入宝…

初步了解JavaSE

目录 前言: 一、Java SE主要包含模块: 二、JavaSE的环境搭建 三、JavaSE简单入门 1)文件名称不对,如果有一个叫 helloworld.java,但是class命名为HelloWord. 2)如果希望我们文件名称和类名不一致&…

光耦合器电路基本概述

在当今快速发展的技术环境中,光耦合器电路在确保电信号跨隔离电路的无缝传输方面发挥着关键作用。这些半导体器件通常被称为光电隔离器,具有许多优点,包括电路隔离、信号传输和精确的电路控制。然而,如果不全面了解市场上各种光耦…

【漏洞复现】通天星CMSV6 admin 弱口令漏洞(CVE-2024-29666)

0x01 产品简介 CMSV6平台是基于车辆位置信息服务和实时视频传输服务的创新技术和开放运营理念。为GPS运营商车辆硬件设备制造商、车队管理企业等车辆运营相关企业提供核心基础数据服务。 0x02 漏洞概述 CMSV6 7.31.0.2、7.32.0.3版本中存在弱密码漏洞,未授权的攻…