使用Selenium爬取图片并保存为Excel:完整教程

embedded/2024/10/25 16:18:51/

使用Selenium爬取图片并保存为Excel:完整教程

项目背景

在日常工作中,我们经常需要收集大量的图片资源,如设计素材、数据集等。通过自动化手段,我们可以高效地获取互联网上的图片,而不是手动下载每一张。这篇文章将详细介绍如何使用Selenium自动化工具来爬取Bing图片搜索中的图片,并将其描述和链接保存为Excel文件。

为什么选择Selenium?

  1. 动态页面支持:Selenium可以模拟用户在浏览器中的行为,适合处理JavaScript动态加载内容的页面。
  2. 浏览器自动化:Selenium能够自动化操作网页,如输入、点击、滚动等,是处理复杂网页爬取的理想工具。

项目实现步骤概述

  1. 前期准备:安装环境及相关工具
  2. 启动Edge浏览器,访问Bing图片搜索页面
  3. 模拟滚动操作,加载更多图片
  4. 抓取图片的链接和描述
  5. 将图片数据保存为Excel文件

第一步:前期准备

在开始之前,我们需要确保开发环境配置正确,包含以下步骤:

1. 安装Python环境

首先,确保系统中安装了Python。你可以通过以下命令检查Python版本:

python --version

如果没有安装Python,可以从Python官网下载并安装。

2. 安装Selenium库

Selenium是用于浏览器自动化的工具。通过以下命令安装Selenium库:

pip install selenium
3. 安装Pandas库

Pandas用于将数据处理为表格格式,方便保存为Excel文件。安装Pandas库:

pip install pandas openpyxl

openpyxl库用于处理Excel文件的读写操作。

4. 下载并配置Edge浏览器的驱动

Selenium需要一个浏览器驱动程序来与实际的浏览器进行交互。由于我们选择使用Microsoft Edge浏览器,需要下载Edge对应的驱动程序——Microsoft Edge WebDriver

  • 下载地址:Microsoft Edge WebDriver
  • 确保驱动版本与浏览器版本一致。你可以通过访问Edge的“设置 -> 关于Microsoft Edge”页面,查看浏览器版本号。
  • 下载完驱动后,将其解压到一个指定路径,并将该路径添加到系统的环境变量中。
5. 验证驱动是否成功

在安装完驱动后,可以通过以下代码验证Selenium是否能够正常启动Edge浏览器:

python">from selenium import webdriver
from selenium.webdriver.edge.options import Options# 设置Selenium选项
options = Options()
options.add_argument("--start-maximized")  # 全屏打开# 初始化Edge浏览器
driver = webdriver.Edge(options=options)# 测试访问页面
driver.get("https://www.bing.com")
print("浏览器启动成功!")# 关闭浏览器
driver.quit()

如果浏览器能够成功启动并访问指定页面,说明前期配置已经完成。

第二步:编写爬取图片的代码

1. 引入必要的库

在正式爬取图片前,我们首先需要引入相关的Python库:

python">import time
import json
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
  • time:用于设置延迟等待时间。
  • json:用于解析图片相关信息的JSON数据。
  • pandas:用于将抓取到的数据保存为表格。
  • selenium:用于自动化浏览器操作。
2. 启动Edge浏览器并访问Bing图片搜索页面

接下来,我们需要启动浏览器并打开Bing图片搜索页面:

python"># 设置Selenium选项
options = Options()
options.add_argument("--start-maximized")  # 全屏打开# 初始化Edge浏览器
driver = webdriver.Edge(options=options)# 打开Bing图片搜索页面
search_url = "https://cn.bing.com/images/search?q=绿色、节能、低碳&form=HDRSC2&first=1&cw=1177&ch=821"
driver.get(search_url)# 等待页面加载完成
time.sleep(3)

这里我们设置了浏览器全屏打开,访问的目标页面是Bing图片搜索页面,关键字为“绿色、节能、低碳”。

3. 模拟页面滚动操作

为了加载更多的图片,我们需要通过浏览器滚动页面来触发动态加载。下面的代码模拟了向下滚动的操作,直到页面不再加载新内容为止:

python">scroll_pause_time = 3  # 每次滚动后的等待时间
last_height = driver.execute_script("return document.body.scrollHeight")
max_scrolls = 20  # 最大滚动次数
scroll_count = 0while scroll_count < max_scrolls:# 滚动到页面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(scroll_pause_time)# 计算新的页面高度new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:break  # 如果页面高度没有变化,停止滚动last_height = new_heightscroll_count += 1
4. 抓取图片的链接和描述

图片的数据(如链接和描述)存储在网页的m属性中,我们通过Selenium获取这些信息并进行解析:

python">image_data = []
image_elements = driver.find_elements(By.XPATH, '//a[@class="iusc"]')for image in image_elements:try:json_data = image.get_attribute('m')data = json.loads(json_data)img_url = data.get('murl')  # 图片链接img_description = data.get('t')  # 图片描述if img_url and img_description:image_data.append([img_description, img_url])except Exception as e:print(f"Error: {e}")

这里通过find_elements方法获取图片的相关元素,并使用json.loads解析图片数据。

5. 保存数据到Excel文件

通过Pandas库将数据存储到Excel文件中:

python"># 保存数据为Excel文件
df = pd.DataFrame(image_data, columns=['描述', '图片链接'])
df.to_excel('绿色低碳节能环保图片.xlsx', index=False)print(f"爬取完成,数据总数: {len(image_data)},已保存到 '绿色低碳节能环保图片.xlsx'")
6. 关闭浏览器

在爬取工作完成后,记得关闭浏览器:

python"># 关闭浏览器
driver.quit()

第三步:完整代码

python">import time
import json
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options# 设置Selenium选项
options = Options()
options.add_argument("--start-maximized")# 初始化Edge浏览器
driver = webdriver.Edge(options=options)# 打开Bing图片搜索页面
search_url = "https://cn.bing.com/images/search?q=绿色、节能、低碳&form=HDRSC2&first=1&cw=1177&ch=821"
driver.get(search_url)# 等待页面加载完成
time.sleep(3)# 模拟滚动操作
scroll_pause_time = 3
last_height = driver.execute_script("return document.body.scrollHeight")
max_scrolls = 20
scroll_count = 0while scroll_count < max_scrolls:driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(scroll_pause_time)new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklast_height = new_heightscroll_count += 1# 抓取图片数据
image_data = []
image_elements = driver.find_elements(By.XPATH, '//a[@class="iusc"]')for image in image_elements:try:json_data = image.get_attribute('m')data = json.loads(json_data)img_url = data.get('murl')img_description = data.get('t')if img_url and img_description:image_data.append([img_description, img_url])except Exception as e:print(f"Error: {e}")# 保存为Excel
df = pd.DataFrame(image_data, columns=['描述', '图片链接'])
df.to_excel('绿色低碳节能环保图片.xlsx', index=False)# 关闭浏览器
driver.quit()print(f"爬取完成,数据总数: {len(image_data)},已保存到 '绿色低碳节能环保图片.xlsx'")

总结

通过这篇教程,从环境配置开始,介绍了如何使用Selenium爬取Bing图片搜索中的图片,并将图片数据保存为Excel文件。


http://www.ppmy.cn/embedded/132369.html

相关文章

【达梦数据库】两台或多台服务器之间免密登录设置-【dmdba用户】

目录 背景1、服务器A免密登录本机1.1、生成私钥&#xff08;id_rsa&#xff09;和公钥&#xff08;id_rsa.pub&#xff09;1.2、追加公钥到服务器A的密码登录权限管理文件1.3、结果验证 2、服务器A免密登录服务器B2.1、确认服务器B有目的文件夹2.2、服务器A的公钥复制到服务器B…

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念&#xff0c;解决办法请直接从第二段开始看。layui多级表头的导出&#xff0c;弄了两天才搞定&#xff0c;中途一度想放弃&#xff0c;还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出&#xff0c;但是多级表头没有正常导出&#xff0c;单元格…

手把手教你从头训练大语言模型,实战经验分享!!

写在前面 自8月底训好自己的1.5B的LLM后&#xff0c;一直都没有发布一个完整的技术报告&#xff0c;不少小伙伴私信我催更&#xff0c;千呼万唤始出来。其实也没有太大动力去做&#xff0c;原因有三&#xff1a; 豁然开朗&#xff1a;搞定全流程之后&#xff0c;对LLM确实豁然…

mac用户使用Windows的方法:虚拟机、远程桌面和迷你主机

&#x1f389; 前言 之前写了一篇博客&#xff0c;里面提到mac想要使用Windows系统可以使用远程桌面的方式连接服务器&#xff0c;今天不妨让我们把思路拓宽&#xff0c;看看还有哪些方法。 &#x1f389; 本质 我们通过远程桌面连接服务器&#xff0c;说到底不就是用本地电…

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域&#xff0c;但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…

C# 实操高并发分布式缓存解决方案

1. CAP 原则 CAP 原则也称为布鲁尔定理&#xff0c;由 Eric Brewer 在 2000 年提出&#xff0c;描述了分布式系统中的三个核心属性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition Tol…

蓝桥杯注意事项

蓝桥杯注意事项 比赛注意事项 能暴力枚举就暴力枚举&#xff0c;能用简单的思路做就尽量用简单的思路做。认真审核题目的题意和输入输出的要求&#xff0c;避免因为误解题意而导致题目错误。对于提供多组测试样例或者需要对一个过程重复进行循环的代码&#xff0c;要时刻记住…

如何设计数据库产品中数据备份与恢复(Backup and Recovery)功能

数据库中的数据备份与恢复&#xff08;Backup and Recovery&#xff09;功能是确保数据持久性、完整性和可用性的关键设计。这一功能的主要目标是防止数据丢失&#xff0c;支持数据库在系统故障、硬件崩溃、软件错误或人为失误时的恢复。备份与恢复设计通常围绕数据的可用性、完…