【小白必看】Python爬虫实战:获取阴阳师网站图片并自动保存

news2024/11/29 4:28:54

文章目录

  • 前言
  • 导入模块
  • 伪装自己
  • 发送请求获取地址列表
  • 获取所有背景的地址
  • 创建文件夹
  • 保存图片文件
  • 完整代码
  • 运行效果
  • 部分图片展示
  • 结束语

在这里插入图片描述

前言

本文介绍了一个使用Python编写的程序,用于获取指定网页的背景图片并保存到本地。在程序中使用了requests模块发送HTTP请求,lxml模块解析HTML文档,以及os模块操作文件与目录。文章详细介绍了每个模块的作用以及具体的代码实现。

本文主要内容包括:

  1. 导入所需的模块:介绍了requestslxmlos模块的作用,并提供了相应的安装方法。
  2. 伪装自己:创建了一个字典headers,用于伪装成浏览器发送请求,以避免被网站识别为脚本发送的请求。
  3. 发送请求获取地址列表:使用requests.get()方法发送HTTP GET请求获取指定URL的网页内容,并将返回的响应保存在变量list_resp中,后续用于解析网页内容。
  4. 获取所有背景的地址:使用lxml模块解析网页内容,使用XPath表达式选取满足条件的图片地址,并将其存储在两个列表中。
  5. 创建文件夹:通过os.path.exists()方法检查是否已存在名为’heng’和’shu’的文件夹,如果不存在则使用os.makedirs()方法创建。
  6. 保存图片文件:使用循环遍历获取到的图片地址,发送HTTP GET请求获取图片内容,并将内容写入本地文件。

通过阅读本文,你可以了解如何使用Python编写一个简单的程序来获取网页背景图片并保存到本地。希望本文对你有所帮助。

导入模块

在这里插入图片描述

# pip install requests  发送请求的模块
import requests
# pip install lxml
from lxml import etree
import os
  • 代码中使用了requests模块发送HTTP请求,判断是否导入该模块,如果没有导入则可以使用pip install requests命令安装。
  • 代码中使用了lxml模块解析HTML文档,判断是否导入该模块,如果没有导入则可以使用pip install lxml命令安装。
  • 代码中使用了os模块操作文件与目录,此模块通常是Python的内置模块,无需额外安装。

伪装自己


# 伪装自己
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
 
  • 创建一个字典headers,其中包含"User-Agent"字段,用于伪装成浏览器发送请求。
  • 通过设置User-Agent字段,使得HTTP请求看起来像是由浏览器发送的,而不是由脚本发送的。

发送请求获取地址列表

# 发送请求获取地址列表
list_resp = requests.get('http://yys.163.com/media/picture.html',headers=headers) 
  • 使用requests.get()方法发送HTTP GET请求,以获取指定URL的网页内容。
  • 通过传入之前定义的headers作为请求头信息,以模拟浏览器发送请求。
  • 将返回的响应保存在list_resp变量中,后续将使用它来解析网页内容。

获取所有背景的地址

# 获取所有背景的地址
e = etree.HTML(list_resp.text)
imgs1 =[url[:url.rindex('/')]+'/2732x2048.jpg' for url in e.xpath('//div[@class="tab-cont"][1]/div/div/img/@data-src')]
imgs2 =[url[:url.rindex('/')]+'/2732x2048.jpg' for url in e.xpath('//div[@class="tab-cont"][2]/div/div/img/@data-src')]

  • 使用etree.HTML()方法将list_resp.text(即网页内容)转换为可以进行XPath解析的对象。
  • 使用XPath表达式选取满足条件的图片地址,并存储在两个列表imgs1imgs2中。这些地址是满足特定条件的背景图片的URL。
  • 使用列表推导式从每个图片地址中提取出图片名称部分,并加上固定的路径片段,形成完整的图片URL。

创建文件夹

if not os.path.exists('heng'):
    os.makedirs('heng')
if not os.path.exists('shu'):
    os.makedirs('shu')
  • 通过os.path.exists()方法检查当前目录下是否已存在名为’heng’和’shu’的文件夹。
  • 如果不存在对应的文件夹,则使用os.makedirs()方法分别创建’heng’和’shu’文件夹。

保存图片文件


for url in imgs1:
    resp = requests.get(url,headers=headers)
    file_name = url[url.rindex('picture'):url.rindex('/')].replace('/','_')+'.jpg'
    print('正在保存:'+file_name+'壁纸')
    with open(f'heng/{file_name}','wb') as f:
        f.write(resp.content)

  • 使用for循环遍历imgs1列表中的每个图片地址。
  • 使用requests.get()方法发送HTTP GET请求,获取每个图片的内容。
  • 根据图片地址生成保存图片的文件名。通过截取URL中的一部分作为文件名,并将其中的/替换为_
  • 使用open()函数以二进制写入模式打开文件,并将图片内容写入文件。
  • 输出每个保存的图片的信息,包括文件名和壁纸名称。提示用户正在保存哪个壁纸。

完整代码

# 导入所需的模块
import requests  # 导入requests模块,用于发送HTTP请求
from lxml import etree  # 导入lxml模块,用于解析HTML文档
import os  # 导入os模块,用于操作文件和目录

# 伪装自己
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}  # 创建一个字典headers,包含"User-Agent"字段,用于伪装成浏览器发送请求。

# 发送请求获取地址列表
list_resp = requests.get('http://yys.163.com/media/picture.html', headers=headers)  # 发送HTTP GET请求,获取指定URL的网页内容。

# 获取所有背景的地址
e = etree.HTML(list_resp.text)  # 将list_resp.text(网页内容)转换为可以进行XPath解析的对象。
imgs1 = [url[:url.rindex('/')]+'/2732x2048.jpg' for url in e.xpath('//div[@class="tab-cont"][1]/div/div/img/@data-src')]
# 使用XPath表达式选取满足条件的图片地址,并存储在imgs1列表中。这些地址是满足特定条件的背景图片的URL。
imgs2 = [url[:url.rindex('/')]+'/2732x2048.jpg' for url in e.xpath('//div[@class="tab-cont"][2]/div/div/img/@data-src')]

# 创建文件夹
if not os.path.exists('heng'):  # 检查当前目录下是否已存在名为'heng'的文件夹。
    os.makedirs('heng')  # 如果不存在'heng'文件夹,则使用os.makedirs()方法创建'heng'文件夹。
if not os.path.exists('shu'):  # 检查当前目录下是否已存在名为'shu'的文件夹。
    os.makedirs('shu')  # 如果不存在'shu'文件夹,则使用os.makedirs()方法创建'shu'文件夹。

# 保存图片文件
for url in imgs1:  # 使用循环遍历imgs1列表中的每个图片地址。
    resp = requests.get(url, headers=headers)  # 发送HTTP GET请求,获取每个图片的内容。
    file_name = url[url.rindex('picture'):url.rindex('/')].replace('/', '_') + '.jpg'
    # 根据图片地址生成保存图片的文件名。通过截取URL中的一部分作为文件名,并将其中的/替换为_。
    print('正在保存:' + file_name + '壁纸')  # 输出每个保存的图片的信息,包括文件名和壁纸名称。
    with open(f'heng/{file_name}', 'wb') as f:  # 以二进制写入模式打开文件,并将图片内容写入文件。
        f.write(resp.content)

运行效果

在这里插入图片描述

部分图片展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结束语

本文介绍了一个基于Python的程序,用于获取指定网页的背景图片并保存到本地。通过使用requests模块发送HTTP请求、lxml模块解析HTML文档以及os模块操作文件与目录,我们可以轻松地实现这个功能。
无论是获取图片地址列表,还是创建文件夹和保存图片文件,本文都详细介绍了每一步的代码实现,同时还提供了运行效果和部分图片展示,帮助读者更好地理解和掌握这个程序。
希望本文能够对你有所帮助,如果你有任何疑问或者更好的建议,欢迎在评论区留言。谢谢阅读!

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

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

相关文章

FCPX插件-15组金色华丽粒子特效闪耀动画 Awards Backgrounds

Awards Backgrounds是fcpx上一个很棒的电影级效果插件,Awards Backgrounds 包含15组金色华丽粒子特效闪耀动画,可以为您的作品创建豪华的背景或叠加特效!包含各种带有可编辑颜色的下落闪闪发光粒子的场景。用于展示奖项提名者、优雅的表演、祝…

【C++】开源:Redis数据库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Redis数据库配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff0c…

Emacs之改造最快文本搜索工具ripgrep(一百一十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

微服务远程调用openFeign简单回顾(内附源码示例)

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件,可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…

Android12之快速查找静态注册jni函数方法(一百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

C++初阶--C++入门

目录 前言C关键字命名空间命名空间的定义命名空间的使用加命名空间名称及作用域限定符使用using namespace 命名空间名称引入使用using将命名空间中的成员引入 C的输入与输出缺省参数全缺省半缺省参数 函数重载参数类型不同参数个数不同参数类型顺序不同 引用引用特性 常引用使…

可视化bi工具datart部署到k8s

目录 1. 前言 2. 安装 2.1 mysql初始化 2.2 datart配置文件持久化 2.3 文件挂载 2.4 部署 3. 登录及创建管理帐号 1. 前言 datart 是新一代数据可视化开放平台,支持各类企业数据可视化场景需求,如创建和使用报表、仪表板和大屏,进行可视…

Python面向对象(三)(继承、封装)

面向对象的三大特性 面向对象编程,是许多编程语言都支持的一种编程思想。 简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。 面向对象包含3大主要特性: 封装 封…

ssl证书安装后还是显示不安全怎么办?解决办法来了

ssl证书安装后还是显示不安全怎么办?一般网站在部署安装ssl证书之后,浏览器的不安全显示就会消除。但有时候,在证书安装完成后,浏览器仍然会出现不安全提示,这时候我们可以按照以下的步骤一一排查解决。 1、确认安装的…

numpy广播机制介绍

广播 广播机制的意义:广播描述了在算术运算期间NumPy如何处理具有不同形状的数组。受某些约束条件的限制,较小的数组会在较大的数组中“广播”,以便它们具有兼容的形状。 在对两个数组进行操作时,NumPy按元素对它们的形状进行比…

UE5.1移动端PreintegratedSkinBxDF解析

Part 1 头文件 MobileBasePassPixelShader.usf 主要看Main函数: #if MOBILE_MULTI_VIEWResolvedView ResolveView(BasePassInterpolants.MultiViewId); #elseResolvedView ResolveView(); #endif这玩意Shader文件找不到,感觉是个全局变量的东西。万幸…

【JDK新特性】必会_Stream API

【必看】原创声明:转载请注明作者 & 文章来源:都在用Stream流? ​​​​​​​ hello,我是小索奇,这次讲解JDK 8新特性的重点!Stream流,到后期学习框架时候你会发现大量的Stream流出现&…

波奇学C++:写实拷贝,_buf数组

我们知道当自定义对象如果在堆上开空间,那么拷贝构造时会深拷贝,深拷贝会加大内存开销,用写实拷贝(也叫延迟拷贝)可以在深浅拷贝中取得平衡。 浅拷贝问题: 析构两次 一个对象修改会影响另一个 用引用计数来解决析构问题 拷贝构造时…

商品库存管理系统设计与实现(Vue+SpringBoot+MySQL)

一、项目背景 当今,我国科技发展日新月异,各类企业迅速崛起,商品类型日益繁多,产品数量急剧增加,企业经营模式越来越多样,信息处理量不断加大,对库存管理提出了更高的要求。通过本系统&#xff…

[详细教程+渠道对接+实战陪跑社区]抖音超火小说推文新玩法

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 本人为科思创业汇,分享网络项目案例! 是啊,公益活动又来…

白话机器学习笔记(二)学习分类

分类用图形来解释,把他想象为有大小有方向带箭头的向量。 设权重向量为 w w w,虚线为使权重向量称为法线向量的直线。 直线的表达式为: w ⋅ x 0 w\cdot x0 w⋅x0 (两个向量的内积) 也可写为: w ⋅ x ∑ i 1 n w i x i w 1…

Python(基于Pyusb)与C#(基于LibUsbDotNet)USB通信速度对比

1、实验背景 项目需求:下位机ZYNQ,需设计上位机与其通信,通信协议USB2.0。ZYNQ端固定Buffer长度为16k,即上位机向ZYNQ发送任意数据,ZYNQ每次反馈16k长度buffer。现对Python(基于Pyusb)与C#(基于LibUsbDotNet)的USB通信…

Windows 微信更新内核(小程序框架)的指南

WMPF-PC 更新指引: 准备工作 1. 安装最新微信客户端( https://dldir1.qq.com/weixin/Windows/WeChatSetup.exe ) 2. 在微信在搜索栏输入:showcmdwnd (包括前面冒号) 中输入以下代码以开启 wmpf 新内核版本(已经是现网默认,可以…

STM32+FPGA的导常振动信号采集存储系统

摘 要 : 针 对 工 厂 重 要 设 备 运 输 途 中 可 能 损 坏 的情 况 , 本 文 设计 了一 套 采 用 STM32F103+F&#xff3…

2023年FPGA好就业吗?

FPGA岗位有哪些? 从芯片设计流程来看,FPGA岗位可以分四类 产品开发期:FPGA系统架构师 芯片设计期:数字IC设计工程师、FPGA开发工程师 芯片流片期:FPGA验证工程师 产品维护期:FAE工程师 从行业上来说&#x…