如何使用 Python 抓取 Google 图片

如何使用 Python 抓取 Google 图片

图像是现代企业的重要组成部分,无论是用于 机器学习在内容生成、数字营销或研究领域都是如此。各行各业的公司都需要大量的图像数据集来进行训练 人工智能模型、分析趋势或丰富内容。手动收集这些图片非常耗时,这就是 Google Image Scraping 发挥作用的地方。

从搜索产品图片的电子商务平台到为营销活动收集视觉效果的社交媒体营销人员,自动收集图片的能力改变了游戏规则。即使是个人用户,也可能需要为设计项目、演示文稿或个人使用下载批量图片。

在本指南中,我们将探讨如何使用 Python 的各种方法刮取 Google 图片,包括 requestsBeautifulSoup和 Selenium.此外,我们还将介绍一种更简便、更高效的替代方法谷歌图片搜索 API-实现无缝图像提取。

为网络抓取设置 Python 环境

在开始编码之前,让我们先安装刮取 Google 图片所需的库。

安装所需的 Python 库

打开终端或命令提示符,安装以下软件包:

pip install requests
pip install beautifulsoup4
pip install selenium
pip install pillow
pip install webdriver-manager

这些库是做什么的?

  • requests - 获取网页的 HTML 内容。
  • BeautifulSoup4 - 解析 HTML 并提取图像 URL 等有用信息。
  • Selenium - 自动进行浏览器交互,以抓取动态内容。
  • 枕头 - 处理图像处理和存储。
  • webdriver 管理器 – 自动管理 Selenium 的 WebDriver 安装。

检查 Google 图片以进行抓取

在编写 scraper 之前,我们先检查一下 Google 图像搜索结果,了解图像是如何加载的。

检查谷歌图片的步骤

  1. 打开谷歌图片 并搜索关键字(如 "日落图像")。
  2. 右键单击图像 并选择 检查 或按 Ctrl Shift I 在 Chrome 浏览器中)。
  3. 寻找  标记。图像 URL 保存在 来源 或 data-src 属性。
  4. 向下滚动以查看 Google 如何使用 JavaScript 动态加载更多图像。

因为图像是动态加载的,所以我们需要 Selenium 向下滚动并提取所有图像 URL。

方法1:使用 BeautifulSoup 抓取 Google 图片

抓取图像的最简单方法是获取 HTML 内容并提取 

用于抓取静态 Google 图片的 Python 代码

import requests
from bs4 import BeautifulSoup
import os

# 定义搜索查询
查询 = "日落影像"
search_url = f "https://www.google.com/search?q={query}&tbm=isch"

# 设置标头以模拟真实浏览器
headers = {"User-Agent": "Mozilla/5.0"}

# Fetch the page content
response = requests.get(search_url, headers=headers)
soup = BeautifulSoup(response.text、 "html.parser")

# 提取图像 URL
image_tags = soup.find_all("img")

# 创建图像存储目录
os.makedirs("图像", exist_ok=True)

# 下载并保存图像
for 我, img in 罗列(图像标签):
    img_url = img.get("src")
    if img_url:
        img_data = requests.get(img_url).content
        with open(f "images/image_{i}.jpg", "wb") as f:
            f.write(img_data)

print("图像下载成功!")

这种方法的局限性

  • Google 使用 JavaScript 动态加载图片,这意味着 requests 单靠自己是无法解决的。
  • 许多图像以缩略图的形式存储,高分辨率版本需要额外请求。

为了应对这些限制,我们使用 Selenium.

由于 Google 图片使用懒加载(在用户滚动时加载图片),因此我们需要 Selenium 向下滚动并提取全分辨率图像 URL。

使用 Selenium 抓取图片的 Python 代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
import os

# 设置 Selenium WebDriver
options = webdriver.ChromeOptions()
options.add_argument("--无头")  # 在无头模式下运行
options.add_argument("--禁用-link-features=自动控制")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# 定义搜索查询
查询 = "日落影像"
search_url = f "https://www.google.com/search?q={query}&tbm=isch"

# 打开谷歌图片
driver.get(search_url)
time.sleep(2)  # 等待图像加载

# 向下滚动多次以加载更多图片
for _ in range(5):
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
    time.sleep(2)

# 提取图像 URL
image_elements = driver.find_elements(By.CSS_SELECTOR.Image_elements) "img")
image_urls = [img.get_attribute("src") for 图像 in 图像元素 if img.get_attribute("src")]

# 创建目录并保存图像
os.makedirs("selenium_images", exist_ok=True)

for i, img_url in 罗列(image_urls):
    img_data = requests.get(img_url).content
    with open(f "selenium_images/image_{i}.jpg", "wb") as f:
        f.write(img_data)

print("图像下载成功!")

driver.quit()

使用硒的优势

  • 手柄 JavaScript 渲染的图像.
  • 动态滚动到 加载更多图像.
  • 摘录 高分辨率 版本的图像。

方法 3:使用 "谷歌图片搜索 API "抓取谷歌图片

在本教程中,我们将使用 Oxylabs 的谷歌图片搜索 API 来获取与特定查询相关的 Google 图片。这 谷歌图片搜索器 允许我们检索图片的 URL、标题、描述以及这些图片所在的页面。

与使用手动网络刮擦方法不同 硒或 BeautifulSoup这可能导致 验证码和 IP 禁止Oxylabs 的谷歌图片搜索 API 确保无缝、自动的图像检索,而不会受阻。

步骤 1 - 设置环境

要开始使用,请确保您已 已安装 Python 3.6 并在系统上运行。我们还需要以下库来与 API 交互并处理结果:

  • requests – 用于向 Oxylabs 的 API 发起 HTTP 请求。
  • pandas - 用于存储和构建提取的图像数据。

要安装这些软件包,请运行以下命令:

pip install requests pandas

第 2 步 - 导入所需程序库

创建一个新的 Python 文件并导入必要的库:

import requests
import pandas as pd

第 3 步:构建应用程序接口有效载荷

Oxylabs 谷歌图片搜索 API 允许用户使用各种参数自定义搜索查询。以下有效载荷结构可帮助我们获取相关图片:

有效载荷 = {
    "source": "谷歌图片",
    "domain": "com",
    "query": "日落",
    "parse": "true",
    "地理位置": "美国",
    "上下文": [
        {
            "键": "搜索操作员",
            "值": [
                {"键": "文件类型", "值": "jpg"},
                {"键": "inurl", "值": "图像"},
            ],
        }
    ],
}

分解有效载荷参数:

  • 来源:指定数据源 (谷歌图片).
  • 领域:设置 Google 域名 (英国de等)。
  • query:定义搜索词(例如:"......")、 "日落").
  • parse:当设置为 true,结果将以结构化 JSON 格式返回。
  • 地理位置:将搜索结果限制在特定国家/地区(例如、 "美国").
  • 背景:允许应用 搜索过滤器.
  • 文件类型:将结果限制为特定的图像格式(例如:......)、 "jpg").
  • inurl:确保图像存储在特定的 URL 结构下(例如:......)、 "图像").

第 4 步 - 提出应用程序接口请求

要获取图像,我们发送 POST 请求 到 Oxylabs 的 API 端点,并提供身份验证凭据:

用户名 = ""
密码 = ""

response = requests.post(
    "https://realtime.oxylabs.io/v1/queries",
    auth=(USERNAME, PASSWORD)、
    json=payload
)

# 提取结果
data = response.json()

确保更换  和  与您的 Oxylabs API 证书.

步骤 5 - 提取和保存图像数据

响应包含结构化图像数据,包括 图像 URL、标题和描述.我们提取这些信息并存储在 Pandas DataFrame 便于加工。

# 提取图像细节
结果 = 数据["results"][0]["content"]
image_results = results["results"]["有机"]

# 创建 DataFrame 来存储图像
df = pd.DataFrame(columns=["图像标题", "图像描述", "图像 URL"])

for 图像 in image_results:
    title = img.get("title", "无标题")
    description = img.get("描述", "无说明")
    url = img.get("url")

    df = pd.concat(
        [pd.DataFrame([[title, description, url]], columns=df.columns)、 df],
        ignore_index=True、
    )

# 将数据保存为 CSV 和 JSON 文件
df.to_csv("google_images.csv", index=False)
df.to_json("google_images.json", orient="分割", index=False)

print("图像数据保存成功!")

步骤 6 - 示例用例

比方说,我们要抓取以下图像 猫咪 同时确保搜索结果仅限于维基百科上的图片。我们可以修改 query 和 背景 相应的参数:

有效载荷 = {
    "source": "谷歌图片",
    "domain": "com",
    "query": "https://upload.wikimedia.org/wikipedia/commons/a/a3/June_odd-eyed-cat.jpg",
    "parse": "true",
    "地理位置": "美国",
    "上下文": [
        {
            "键": "搜索操作员",
            "值": [
                {"键": "网站", "值": "wikipedia.org"},
                {"键": "文件类型", "值": "jpg"},
                {"键": "inurl", "值": "图像"},
            ],
        }
    ],
}

"(《世界人权宣言》) 地点 搜索运算符确保搜索结果只来自 wikipedia.org.......。 文件类型 过滤器保证我们收到 JPG 图像.

第 7 步 - 查看和导出数据

请求处理完毕后,提取的图像数据将保存在 CSV 和 JSON 格式,方便查阅。

为什么使用 Oxylabs 的谷歌图片搜索 API?

虽然基于 Python 的刮擦方法使用了 硒和 BeautifulSoup 它们可以发挥作用,但也带来了重大挑战:

  • IP 屏蔽和验证码 需要不断变通。
  • 谷歌的动态加载 使刮削变得不可靠。
  • 频繁更改网站 刮板破损,需要持续维护。

Oxylabs API 与手动搜索相比的优势

  • 绕过验证码和机器人检测 - 无需代理或验证码解码器。
  • 可扩展解决方案 - 无需 IP 禁止即可处理大规模图像搜索。
  • 快速高效 - 返回高分辨率图像,延迟时间极短。
  • 结构化数据输出 - 无需手动解析 HTML。
  • 轻松集成 - 简单 POST 请求 提供随时可用的结果。

而不是担心 谷歌机器人保护Oxylabs 的谷歌图片搜索 API 提供了 无忧、可扩展、合法 高效搜索 Google 图片的方法。

最终想法

如果你在使用 Python,抓取 Google 图片是一个不错的选择。 Selenium、BeautifulSoup 和 Requests但它也有局限性。 IP 封锁、CAPTCHA 验证挑战,以及 JavaScript 渲染问题 人工刮削 耗时且不可靠.

对于一个 更快、更高效、可扩展的解决方案Oxylabs 的谷歌图片搜索 API 是最佳选择。与 即用型结构化结果、免验证码访问和完全自动化对于需要高质量图像数据的企业和开发人员来说,这是一款理想的工具。

类似文章