使用Selenium爬取图片并保存为Excel:完整教程
项目背景
在日常工作中,我们经常需要收集大量的图片资源,如设计素材、数据集等。通过自动化手段,我们可以高效地获取互联网上的图片,而不是手动下载每一张。这篇文章将详细介绍如何使用Selenium自动化工具来爬取Bing图片搜索中的图片,并将其描述和链接保存为Excel文件。
为什么选择Selenium?
- 动态页面支持:Selenium可以模拟用户在浏览器中的行为,适合处理JavaScript动态加载内容的页面。
- 浏览器自动化:Selenium能够自动化操作网页,如输入、点击、滚动等,是处理复杂网页爬取的理想工具。
项目实现步骤概述
- 前期准备:安装环境及相关工具。
- 启动Edge浏览器,访问Bing图片搜索页面。
- 模拟滚动操作,加载更多图片。
- 抓取图片的链接和描述。
- 将图片数据保存为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_height
scroll_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:break
last_height = new_height
scroll_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文件。
版权归原作者 OEC小胖胖 所有, 如有侵权,请联系我们删除。