0


使用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_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文件。


本文转载自: https://blog.csdn.net/2301_79858914/article/details/143151679
版权归原作者 OEC小胖胖 所有, 如有侵权,请联系我们删除。

“使用Selenium爬取图片并保存为Excel:完整教程”的评论:

还没有评论