【自动化】如何从列表中找到图片并命名保存下来

以下是对这段 Python 代码的分析:

代码功能概述

这段代码主要使用了 DrissionPage 库(看起来是用于自动化网页操作相关的库)来与浏览器(基于 Chromium 内核)进行交互,实现以下功能:

  1. 打开豆瓣图书最新页面,并等待 1 秒让页面加载完成。
  2. 对整个页面进行截图保存为 ./img1/pic.jpg
  3. 循环 3 次,每次在当前页面查找所有符合 x://li[@class="media clearfix"] 选择器的元素(可能代表每本图书的相关元素),然后获取图书的名称、封面图片的链接,并下载封面图片保存到 ./img/ 目录下(文件名以图书名称命名),每成功下载一个封面图片会打印相应提示信息。之后点击页面上的 “后页” 按钮进行翻页,同时等待页面开始加载新内容。

代码可能存在的问题及改进点

1. 导入模块问题

如果 DrissionPage 库没有正确安装,代码在运行时会出现 ModuleNotFoundError 导入模块失败的错误。需要提前确保通过 pip 等包管理工具正确安装该库,例如在命令行执行 pip install DrissionPage(假设它在 Python 包索引中有发布)。

2. 元素定位稳定性

代码中使用的 x:// 这种定位方式(推测是 DrissionPage 自定义的定位语法)选择元素,其准确性依赖于网页的 HTML 结构是否稳定。如果豆瓣图书页面的 HTML 结构发生变化,比如图书列表项的 class 属性改变了,或者内部元素的层级结构调整了,那么像 x://li[@class="media clearfix"] 等选择器可能就无法正确定位到元素,导致代码后续获取图书信息、封面等操作失败。可以考虑增加一些异常处理逻辑,比如当定位元素失败时进行适当提示或者尝试其他备用的定位方式。

3. 保存图片相关问题
  • 文件名合法性:图书名称有可能包含一些操作系统不允许作为文件名的特殊字符(如 /\:* 等),直接用图书名称作为文件名保存图片可能会导致保存失败。需要对名称进行适当的处理,比如去除或替换这些非法字符,可以使用 Python 的 re 模块结合正则表达式来实现。
  • 图片下载的可靠性:在下载图片时只是简单地调用了某个保存方法(代码中的 img.save ,具体实现依赖 DrissionPage 库),没有对下载失败等情况做额外处理,比如网络问题导致图片下载中断等情况。可以添加代码来检查图片是否真的完整下载成功,比如检查文件大小是否符合预期或者验证图片文件的完整性等。
4. 翻页逻辑可能的问题
  • 点击 “后页” 的有效性:代码中直接通过 page("后页>").click() 来点击 “后页” 按钮,依赖于页面上有对应文本为 “后页” 且能被正确识别点击的元素存在,如果页面的翻页按钮文字或者结构变化,这行代码就会失效。可以通过更稳定的定位方式,比如通过查找具有特定 id 或者符合特定相对位置等条件的按钮元素来进行点击操作。
  • 加载等待问题:代码中使用 page.wait.load_start() 等待页面加载开始,但可能更好的做法是等待页面加载完成(例如等待某些关键元素出现或者页面状态变为 ready 等),仅等待加载开始可能后续操作会因为页面还未完全加载而出现元素找不到等错误情况。可以使用 page.wait.load_end() (如果 DrissionPage 库有提供这样的方法来等待加载结束)之类更合适的等待机制。

以下是一种简单的改进示例(仅示意对文件名处理和增加部分异常处理逻辑方面,假设 DrissionPage 库相关方法按常规预期工作,其他如更稳定的元素定位等完整改进会更复杂):

import re
from DrissionPage._pages.chromium_page import ChromiumPagepage = ChromiumPage()
page.get("https://book.douban.com/latest?subcat=%E5%85%A8%E9%83%A8")
page.wait(1)
page.get_screenshot(path='./img1/', name="pic.jpg", full_page=True)for i in range(3):for book in page.eles('x://li[@class="media clearfix"]'):name = book.ele('x://h2[@class="clearfix"]/a').text# 处理文件名中的非法字符,替换为下划线等合法字符valid_name = re.sub(r'[^\w\.]', '_', name)url = book.ele('x://img[@class="subject-cover"]').attr('src')img = book('x://img')try:img.save(path="./img/", name=f"{valid_name}.jpg")print(f"图书封面img.src{name}下载成功")except Exception as e:print(f"图书封面 {name} 下载失败,原因: {str(e)}")try:page("后页>").click()print(i)page.wait.load_end()  # 改为等待加载结束except Exception as e:print(f"翻页操作失败,原因: {str(e)}")

总之,这段代码实现了一个简单的豆瓣图书页面信息抓取和封面图片下载的自动化流程,但在实际应用中,为了保证其稳定性和可靠性,需要对上述提到的一些方面进行进一步优化和完善。

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

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

相关文章

01 认识python

# 1.什么是编程,什么是编程语音? # 编程:用代码编程程序 # 编程语言:用那种语法规则来编写程序 # a 10 > 10100101(exe) # # # 2.编程语言分类:C语言 GO语言 # 1,编译型:一次性把源代码进行翻…

如何在Linux系统中排查GPU上运行的程序

如何在Linux系统中排查GPU上运行的程序 在Linux系统中,随着深度学习和高性能计算的普及,GPU资源的管理和监控变得越来越重要。当您遇到GPU资源不足或性能下降的问题时,需要能够快速定位并解决这些问题。本文将介绍几种常用的方法来帮助您排查…

【H2O2|全栈】JS进阶知识(九)ES6(5)

目录 前言 开篇语 准备工作 class类 概念 形式 直接继承 概念 优点 案例 重写 概念 案例 关于重载 结束语 前言 开篇语 本系列博客主要分享JavaScript的进阶语法知识,本期为第九期,依然围绕ES6的语法进行展开。 本期内容为&#xff1a…

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务: 综述 论文地址:https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见,这体现在大型科技公司的投资以及媒体和在线社…

学会Lambda,让程序Pythonic一点

Lambda是Python里的高阶用法,要把代码写得Pythonic,就需要了解这些高阶用法,想说自己是一名真正的Python程序员,先要把代码写得Pythonic。 今天聊下Lambda的用法,写篇简短的用法说明。 Lambda是匿名函数的意思&#…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日,第二十一届中国国际半导体博览会(IC China 2024)在北京国家会议中心顺利举办,加速科技携重磅产品及全系测试解决方案精彩亮相,加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

window11编译pycdc.exe

一、代码库和参考链接 在对python打包的exe文件进行反编译时,会使用到uncompyle6工具,但是这个工具只支持python3.8及以下,针对更高的版本的python则不能反编译。 关于反编译参考几个文章: Python3.9及以上Pyinstaller 反编译教…

【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)

深度极限学习机 (DELM) 作为一种新型的深度学习算法,凭借其独特的结构和训练方式,在诸多领域展现出优异的性能。本文将重点探讨DELM在多输入单输出 (MISO) 场景下的应用,深入分析其算法原理、性能特点以及未来发展前景。 1、 DELM算法原理及其…

前端-react(class组件和Hooks)

文章主要以Hooks为主,部分涉及class组件方法进行对比 一.了解react 1.管理组件的方式 在React中,有两种主要的方式来管理组件的状态和生命周期:Class 组件和 Hooks。 Class 组件: Class 组件是 React 最早引入的方式,它是基于…

Ollama vs VLLM:大模型推理性能全面测评!

最近在用本地大模型跑实验,一开始选择了ollama,分别部署了Qwen2.5-14B和Qwen2.5-32B,发现最后跑出来的实验效果很差,一开始一直以为prompt的问题,尝试了不同的prompt,最后效果还是一直不好。随后尝试了vllm部署Qwen2.5…

Webpack之后,Rollup如何引领前端打包新潮流?(1)

快速开始 安装rollup pnpm add rollup -Drollup基本命令行 . ├── package.json └── src├── index.js└── util.jsindex.js import { getRandomNum } from "./util.js"; const r getRandomNum(1, 10) console.log(r)util.js /*** 随机数* param {*} …

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…

【PCIE常见面试问题-1】

PCIE常见面试问题-1 1 PCIE概述1.1 PCI为何发展开PCIE?1.2 什么是Root Complex(RC)1.3 什么是EP?1.4 什么是Swith1.5 PCIE协议如何组织通信的?1.6 简要介绍一下PCIE的分层结构,为什么需要分层?1.7 PCIE的事务类型有哪些…

解决 Docker Desktop 启动报错:Docker Desktop is unable to detect a Hypervisor

在使用 Docker Desktop 时,有时会遇到启动报错:“Docker Desktop is unable to detect a Hypervisor.” 这是由于系统的虚拟化功能未正确启用或配置导致的。本文将分步骤指导如何解决该问题。 一、检查虚拟化是否已启用 打开任务管理器 按下 Ctrl Shift…

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记! 温州惠采科技有限责任公司,成立于2024年,位于浙江省温州市,是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中,想使用一种既能提升运营效率又能节省成本…

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中,会发现无法连接oracle,测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库,我们通过安装orac…

东方通重置管理员密码

百度给出的回答 注意,箭头所指的密码是举例,不是自己的默认密码 自己的默认密码存储在下图位置 原文地址

spark 写入mysql 中文数据 显示?? 或者 乱码

目录 前言 Spark报错: 解决办法: 总结一下: 报错: 解决: 前言 用spark写入mysql中,查看中文数据 显示?? 或者 乱码 Spark报错: Sat Nov 23 19:15:59 CST 2024 WARN: Establishing SSL…

电子应用设计方案-20:智能电冰箱系统方案设计

智能电冰箱系统方案设计 一、系统概述 本智能电冰箱系统旨在提供更便捷、高效、智能化的食品存储和管理解决方案,通过集成多种传感器、智能控制技术和联网功能,实现对冰箱内部环境的精确监测和控制,以及与用户的互动和远程管理。 二、系统组成…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…