使用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版本:

bash 复制代码
python --version

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

2. 安装Selenium库

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

bash 复制代码
pip install selenium
3. 安装Pandas库

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

bash 复制代码
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 = 0

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

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 = 0

while 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文件。

相关推荐
铁盒薄荷糖1 小时前
【Pytorch】Pytorch的安装
人工智能·pytorch·python
yyfhq1 小时前
rescorediff
python·深度学习·机器学习
糊涂君-Q1 小时前
Python小白学习教程从入门到入坑------第十九课 异常模块与包【下】(语法基础)
开发语言·python·学习·程序人生·改行学it
API199701081101 小时前
京东平台接口技术详解及示例代码
开发语言·前端·python
(●'◡'●)知2 小时前
基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)
人工智能·python·opencv·机器学习·计算机视觉
秦朝胖子得加钱2 小时前
Flask
后端·python·flask
幽兰的天空2 小时前
Python实现的简单时钟
开发语言·python
NCU_AI3 小时前
Python 网络爬虫快速入门
python·网络爬虫
幽兰的天空3 小时前
简单的Python爬虫实例
开发语言·爬虫·python
IT·小灰灰4 小时前
Python——自动化发送邮件
运维·网络·后端·python·自动化