Python Selenium 图片资源自动搜索保存 项目实践

实现访问首页

from os.path import dirnamefrom selenium import webdriverclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self):"""初始化"""self.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")print("=======结束=======")if __name__ == '__main__':ImageAutoSearchAndSave().run()

启动后会自动打开一个页面
在这里插入图片描述

实现图片自动欧索

from os.path import dirnamefrom selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword):"""初始化"""self.keyword = keywordself.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")# 搜索图片self._search_image()print("=======结束=======")def _search_image(self):'''搜索图片'''elem = self.driver.find_element_by_css_selector("input[name]")elem.send_keys(self.keyword + Keys.ENTER)if __name__ == '__main__':keyword = "cat"ImageAutoSearchAndSave(keyword).run()

遍历所有图片列表页面

页面分析

第一页
在这里插入图片描述
第二页
在这里插入图片描述
由此可得出变化的只有这里,根据pagi= 展示不同页面
在这里插入图片描述
红色箭头定位到页数,绿色的不要使用 是反爬虫的限制,不断变化的
在这里插入图片描述

from os.path import dirnamefrom selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword):"""初始化"""self.keyword = keywordself.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")# 搜索图片self._search_image()# 遍历所有页面self._iter_all_page()print("=======结束=======")def _search_image(self):'''搜索图片'''elem = self.driver.find_element_by_css_selector("input[name]")elem.send_keys(self.keyword + Keys.ENTER)def _iter_all_page(self):'''遍历所有页面'''# 获取总页面elem = self.driver.find_element_by_css_selector("input[class^=pageInput]")page_total = int(elem.text.strip("/ "))# 遍历所有页面base_url = self.driver.current_urlfor page_num in range(1,page_total+1):if page_num>1:self.driver.get(f"{base_url}?pagi={page_num}&")
if __name__ == '__main__':keyword = "sunflower"ImageAutoSearchAndSave(keyword).run()

获取所有图片详情页链接

在这里插入图片描述

from os.path import dirnamefrom lxml.etree import HTML
from selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword):"""初始化"""self.keyword = keywordself.all_detail_link = []self.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")# 搜索图片self._search_image()# 遍历所有页面self._iter_all_page()print("=======结束=======")def _search_image(self):'''搜索图片'''elem = self.driver.find_element_by_css_selector("input[name]")elem.send_keys(self.keyword + Keys.ENTER)def _iter_all_page(self):'''遍历所有页面'''# 获取总页面elem = self.driver.find_element_by_css_selector("input[class^=pageInput]")page_total = int(elem.text.strip("/ "))# 遍历所有页面base_url = self.driver.current_urlfor page_num in range(1, page_total + 1):if page_num > 1:self.driver.get(f"{base_url}?pagi={page_num}&")# href 属性root = HTML(self.driver.page_source)# a标签中的href属性detail_links = root.xpath("//div[start-with(@class,'result')]//a[start-with(@class,'link')]/@href")for detail_link in detail_links:self.all_detail_link.append(detail_link)if __name__ == '__main__':keyword = "sunflower"ImageAutoSearchAndSave(keyword).run()

增加下载数量的限制

在这里插入图片描述

from os.path import dirnamefrom lxml.etree import HTML
from selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword,limit=0):"""初始化"""self.keyword = keywordself.all_detail_link = []self.limit=limit #0表示没有限制self.count = 0 #用来计数self.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")# 搜索图片self._search_image()# 遍历所有页面self._iter_all_page()print("=======结束=======")def _search_image(self):'''搜索图片'''elem = self.driver.find_element_by_css_selector("input[name]")elem.send_keys(self.keyword + Keys.ENTER)def _iter_all_page(self):'''遍历所有页面'''# 获取总页面elem = self.driver.find_element_by_css_selector("input[class^=pageInput]")# page_total = int(elem.text.strip("/ "))page_total = 5# 遍历所有页面base_url = self.driver.current_urlfor page_num in range(1, page_total + 1):if page_num > 1:self.driver.get(f"{base_url}?pagi={page_num}&")# href 属性root = HTML(self.driver.page_source)is_reach_limit = False# 获取每一页详情链接   a标签中的href属性detail_links = root.xpath("//div[start-with(@class,'result')]//a[start-with(@class,'link')]/@href")for detail_link in detail_links:self.all_detail_link.append(detail_link)self.count += 1if self.limit >0 and self.count == self.limit:is_reach_limit = Truebreakif is_reach_limit:break
if __name__ == '__main__':keyword = "sunflower"limit = 3ImageAutoSearchAndSave(keyword,limit).run()

获取所有图片详情、获取图片下载链接

在这里插入图片描述

from os.path import dirnamefrom lxml.etree import HTML
from selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword, limit=0):"""初始化"""self.keyword = keywordself.all_detail_link = []self.limit = limit  # 0表示没有限制self.count = 0  # 用来计数self.all_download_link = [] # 图片详情的下载链接self.driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self.driver.get("https://pixabay.com/")# 搜索图片self._search_image()# 遍历所有页面self._iter_all_page()# 访问图片详情页self._visit_image_detail()# 释放资源self.driver.close()del self.all_detail_linkprint("=======结束=======")def _search_image(self):'''搜索图片'''elem = self.driver.find_element_by_css_selector("input[name]")elem.send_keys(self.keyword + Keys.ENTER)def _iter_all_page(self):'''遍历所有页面'''# 获取总页面elem = self.driver.find_element_by_css_selector("input[class^=pageInput]")# page_total = int(elem.text.strip("/ "))page_total = 5# 遍历所有页面base_url = self.driver.current_urlfor page_num in range(1, page_total + 1):if page_num > 1:self.driver.get(f"{base_url}?pagi={page_num}&")# href 属性root = HTML(self.driver.page_source)is_reach_limit = False# 获取每一页详情链接   a标签中的href属性detail_links = root.xpath("//div[start-with(@class,'result')]//a[start-with(@class,'link')]/@href")for detail_link in detail_links:self.all_detail_link.append(detail_link)self.count += 1if self.limit > 0 and self.count == self.limit:is_reach_limit = Truebreakif is_reach_limit:breakdef _visit_image_detail(self):'''访问图片详情页'''for detail_link in self.all_detail_link:self.driver.get(detail_link)elem = self.driver.find_element_by_css_selector("#media_container > picture > img")download_link = elem.get_attribute("src")self.all_download_link.append(download_link)if __name__ == '__main__':keyword = "sunflower"limit = 3ImageAutoSearchAndSave(keyword, limit).run()

下载所有图片

from io import BytesIO
from os import makedirs
from os.path import dirname
from time import strftimeimport requests
from PIL import Image
from lxml.etree import HTML
from selenium import webdriver
from selenium.webdriver.common.keys import Keysclass ImageAutoSearchAndSave:"""图片自动搜索保存"""def __init__(self, keyword, limit=0):"""初始化"""self._keyword = keywordself.all_detail_link = []self._limit = limit  # 0表示没有限制self._count = 0  # 用来计数self.all_download_link = [] # 图片详情的下载链接self._driver = webdriver.Chrome(executable_path=dirname(__file__) + "/chromedriver.exe")def run(self):"""开始运行"""print("=======开始=======")# 访问首页self._driver.get("https://pixabay.com/")# 搜索图片self._search_image()# 遍历所有页面self._iter_all_page()# 访问图片详情页self._visit_image_detail()# 释放资源self._driver.close()del self.all_detail_link# 下载所有图片self._download_all_image()print("=======结束=======")def _search_image(self):'''搜索图片'''elem = self._driver.find_element_by_css_selector("input[name]")elem.send_keys(self._keyword + Keys.ENTER)def _iter_all_page(self):'''遍历所有页面'''# 获取总页面elem = self._driver.find_element_by_css_selector("input[class^=pageInput]")# page_total = int(elem.text.strip("/ "))page_total = 5# 遍历所有页面base_url = self._driver.current_urlfor page_num in range(1, page_total + 1):if page_num > 1:self._driver.get(f"{base_url}?pagi={page_num}&")# href 属性root = HTML(self._driver.page_source)is_reach_limit = False# 获取每一页详情链接   a标签中的href属性detail_links = root.xpath("//div[start-with(@class,'result')]//a[start-with(@class,'link')]/@href")for detail_link in detail_links:self.all_detail_link.append(detail_link)self._count += 1if self._limit > 0 and self._count == self._limit:is_reach_limit = Truebreakif is_reach_limit:breakdef _visit_image_detail(self):'''访问图片详情页 获取对应的图片链接'''for detail_link in self.all_detail_link:self._driver.get(detail_link)elem = self._driver.find_element_by_css_selector("#media_container > picture > img")download_link = elem.get_attribute("src")self.all_download_link.append(download_link)def _download_all_image(self):'''下载所有图片'''download_dir = f"{dirname(__file__)}/download/{strftime('%Y%m%d-%H%M%S')}-{self._keyword}"makedirs(download_dir)#下载所有图片count = 0for download_link in self.all_download_link:response = requests.get(download_link)count += 1# response.content 二进制内容  response.text 文本内容image = Image.open(BytesIO(response.content))# rjust  000001.pngfilename = f"{str(count).rjust(6,'0')}.png"file_path = f"{download_dir}/{filename}"image.save(file_path)if __name__ == '__main__':keyword = "sunflower"limit = 3ImageAutoSearchAndSave(keyword, limit).run()

可以适当的进行优化,使用selnium的页面加载策略

在这里插入图片描述

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

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

相关文章

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

2021年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 2021年全国硕士研究生入学招生考试英语二试题SectionⅠUse of EnglishSection Ⅱ Reading ComprehensionText 1Text 2Text 2Text 3Text 4 Section III TranslationSection Ⅳ Writing 2021年全国硕士研究生入学招生考试英语二试题 SectionⅠUse of English Directio…

oracle数据库备份2(expdp)

使用exp命令定时进行数据库备份的操作前面已经记录过: oralce数据库定时备份 下面记录下使用更加高效的expdp命令和impdp,这两个命令同样是用来做数据库备份和还原的,但速度更快,效率更高,缺点是只能用在服务器端进行…

阿里云ACE认证之国际版与国内版对比!

大厂疯狂裁员,互联网行业迎来寒冬,技术人员被动陷入疯狂内卷。在愈加内卷的IT领域,“云计算”作为少有的蓝海,无疑是打工人未来实现职场提升、摆脱内卷的绝佳选择! 对于云计算行业的人来说,最值得考的肯定是…

洪泽湖流域建筑物、人口密度与土地利用数据技术服务

一.背景介绍 人类社会发展离不开土地,没有土地就没有人类,土地利用随着人类的出现而发生。人类为了一定的社会或经济方面的目的,会通过利用、改造等活动。从土地上获得更多的资源。土地利用既要受自然条件的制约,同时也…

2023年国赛试题:配置inux1 为 CA 服务器

试题内容:配置 linux1 为 CA 服务器,为 linux 主机颁发证书。证书颁发机构有 效期 10 年,公用名为 linux1.skills.lan。申请并颁发一张供 linux 服务器使用的证书,证书信息:有效期 =5 年,公用名=skills.lan, 国家=CN,省=Beijing,城市=Beijing,组织=skills,组织单位…

Unity UGUI的自动布局-LayoutGroup(水平布局)组件

Horizontal Layout Group | Unity UI | 1.0.0 1. 什么是HorizontalLayoutGroup组件? HorizontalLayoutGroup是Unity UGUI中的一种布局组件,用于在水平方向上对子物体进行排列和布局。它可以根据一定的规则自动调整子物体的位置和大小,使它们…

亚马逊云科技实现了奇瑞捷豹路虎SAP系统的上云目标并保持成本优化

11月23日,“2023第八届IDC中国数字化转型年度盛典”正式开启并揭晓“2023 IDC中国未来企业大奖-卓越奖”获奖企业,奇瑞捷豹路虎汽车有限公司(以下简称“奇瑞捷豹路虎”)凭借“基于云原生的智慧化运营平台”项目,继获得…

自动驾驶HWP功能规范

HWP功能规范 Highway Pilot Functional Specification 文件状态: 【√】草稿 【】正式发布 【】正在修改 文件起草分工 撰写: 审核: 编制: 签名: 日期: 审核: 签名: 日期&am…

企业业务场景如何实现自动化连接?

为什么要实现企业业务场景的自动化连接? 可提高效率,自动化连接可以减少人工操作和手动干预的需求,从而提高业务处理的速度和效率。通过自动化连接,不同的系统、应用程序和流程可以自动协同工作,减少了人工处理的时间和…

【计算机组成原理】存储系统

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以…

打游戏NVIDIA怎么设置性能最好?

打游戏NVIDIA怎么设置性能最好?当前很多用户都在Win10电脑上畅玩游戏,所以想知道NVIDIA控制面板最佳设置方法,更好地发挥NVIDIA控制面板性能,用户就能享受更棒的游戏乐趣。接下来小编给大家详细介绍NVIDIA显卡游戏最佳设置步骤教程…

【Proteus仿真】【51单片机】智能晾衣架设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用LCD1604液晶、按键、蜂鸣器、L298N电机、PCF8591 ADC模块、DHT11温湿度传感器、雨滴传感器、风速、光线传感器等。 主要功能: 系统运行…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 6》(10)

《Linux操作系统原理分析之Linux 进程管理 6》(10) 4 Linux 进程管理4.6 Linux 管道4.6.1 管道的概念4.6.2 无名管道1.终端使用2.程序中使用 4.6.2 命名管道1.终端使用2.程序中使用 4 Linux 进程管理 4.6 Linux 管道 4.6.1 管道的概念 1、管道是 linu…

2019年10月17日: Go生态洞察:在Go 1.13中处理错误

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Mysql数据库多表数据查询问题

1、背景 线上某个业务数据分表存储在10个子表中,现在需要快速按照条件(比如时间范围)筛选出所有的数据,主要是想做一个可视化的数据查询工具,给产研团队使用。 2、实践 注意:不要在线上真实数据库操作&am…

用户选择PowerFlex的十大理由

既有高性能      满足AI、VDI、数据库等工作负载      又有开放架构      4个节点起步可扩展至上千节点      支撑起不断变化的新兴应用负载      还能与云互通      实现云上云下互联      Dell PowerFlex      连续八季度销量增长      …

提升企业文档处理效率,尽在Readiris PDF Corporate下载

在现代企业中,大量的文档处理工作是不可避免的。然而,传统的文档处理方法往往效率低下,浪费了企业宝贵的时间和资源。为了帮助企业提升文档处理效率,我们推荐使用Readiris PDF Corporate软件。 Readiris PDF Corporate是一款功能…

HarmonyOS 应用模型开发指南介绍

一、基本概念解析 新版文档中的知识点,介绍更全面,逻辑更清晰,提供了各类基本概念解析,帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。 1、HAP是什么? 开发者通过DevEco Studio把应用程序编译为一…

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…