当前位置: 首页 > news >正文

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

使用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浏览器:

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库:

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图片搜索页面:

# 设置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. 模拟页面滚动操作

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

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获取这些信息并进行解析:

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文件中:

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

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

# 关闭浏览器
driver.quit()

第三步:完整代码

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.mrgr.cn/news/55948.html

相关文章:

  • SP00S12浪涌保护模块,给你的工业总线上道“保险”
  • VScode运行C语言终端输出中文乱码问题解决方案
  • vue3 mitt 跨组件传值
  • 01-编程入门
  • 国有企业在薪酬管理方面常出现哪些问题?
  • 【WPF】中Binding的应用
  • 哪个牌子的台灯性价比高?五款性价比拉满的护眼台灯推荐
  • Thymeleaf模板引擎教程(详细总结)
  • Redis进阶:Spring框架中利用Redis实现对象的序列化存储
  • 华为员工爆料:朋友怀孕被裁,直接赔偿了82W!我真有点“羡慕”了。网友:“这算啥,我还见过更绝的!”
  • Node-RED开源项目的modbus通信(TCP)
  • Maven - Assembly实战
  • 【3D】几何算法合集2(自用资源)方便cv
  • 04_Pandas高级操作(上)
  • 【Docker】在AlmaLinux 8.10系统中安装Docker-ce过程分享
  • 自学网络安全?一般人我还是劝你算了吧
  • Tkinter中grid设置位置
  • 创建 RpcThreadPoolUtil 工具类
  • 基于Consul的 Redis 多实例监控方案
  • 【Dv2Admin】软删除的修改与恢复
  • 第6天:Intent和页面导航-补充材料——`MainActivity.kt`解读
  • SpringBoot 面试常见问答总结(一)
  • Ovito旋转模型的技巧
  • 【已解决】【Hadoop】 Shell命令易错点及解决方法
  • MRU烟气分析仪维修VARIOplus工业气体分析仪修理
  • 【前端构建】Snowpack: 现代化的前端构建工具