【python实用小脚本-127】基于 Python 的 Google 图片爬取工具:实现高效图片数据收集

引言

在数据科学、机器学习和多媒体应用中,图片数据的收集是一个常见且重要的任务。Google 图片是一个丰富的图片资源库,能够为各种项目提供大量的图片数据。本文将介绍一个基于 Python 的 Google 图片爬取工具,它能够自动化地从 Google 图片搜索结果中下载图片。该工具主要利用了 Python 的 seleniumBeautifulSoupurllibargparse 库,结合了网页自动化和数据解析技术,为用户提供了一个高效且灵活的图片数据收集解决方案。

总体功能概述

Google 图片爬取工具是一个 Python 脚本,其核心功能是从 Google 图片搜索结果中自动化地下载图片。它通过调用 selenium 库来模拟浏览器操作,利用 BeautifulSoup 库解析网页内容,并使用 urllib 库下载图片。此外,工具还通过 argparse 库提供了命令行参数解析功能,使用户能够灵活地指定搜索关键词和保存路径。

环境准备与驱动下载

为了确保工具能够正常运行,需要确保 geckodriver(Firefox 浏览器驱动)已正确安装并配置。工具提供了自动下载和安装功能,以下是相关代码片段及解析:

import geckodriver_autoinstaller

def driver_download():
    # Check if the current version of geckodriver exists
    # if it doesn't exist, download it automatically,
    # then add geckodriver to PATH.
    geckodriver_autoinstaller.install()

在上述代码中,geckodriver_autoinstaller.install() 方法会自动检查当前系统是否已安装 geckodriver,如果没有安装,则会自动下载并安装到系统路径中,确保 selenium 能够正常调用。

命令行参数解析

为了使工具能够灵活地接收用户输入,我们采用了 Python 的 argparse 库来解析命令行参数。以下是命令行参数解析的代码片段及解析:

import argparse

def google_images_scraper():
    parser = argparse.ArgumentParser(description="Scrape Google images")
    parser.add_argument(
        "-s", "--search", default="mangoes", type=str, help="search term"
    )
    parser.add_argument(
        "-d", "--directory", default="images/", type=str, help="save directory"
    )
    args = parser.parse_args()
    query = args.search
    savePath = args.directory
    print("Search Term is " + query)
    print("Images will be saved to " + savePath + " directory")

在上述代码中,argparse.ArgumentParser 创建了一个参数解析器实例,add_argument 方法用于添加命令行参数。--search 参数允许用户指定搜索关键词,默认值为 "mangoes"--directory 参数允许用户指定保存图片的目录,默认值为 "images/"。通过 parse_args 方法解析命令行参数,并将解析结果存储在 args 对象中,随后可以根据用户输入的参数值来执行相应的逻辑。

网页自动化与图片搜索

工具通过 selenium 库模拟浏览器操作,访问 Google 图片搜索页面并滚动页面以加载更多图片。以下是网页自动化与图片搜索的代码片段及解析:

from selenium import webdriver
import time

GECKO_PATH = "/path/to/gecko/dir"  # /usr/bin/geckodriver
if os.path.isfile(GECKO_PATH):
    pass
else:
    driver_download()

site = "https://www.google.com/search?tbm=isch&q=" + query
driver = webdriver.Firefox(executable_path=GECKO_PATH)
driver.get(site)

i = 0
while i < 5:
    driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
    try:
        driver.find_element_by_xpath(
            "/html/body/div[2]/c-wiz/div[3]/div[1]/div/div/div/div/div[5]/input"
        ).click()
    except Exception:
        pass
    time.sleep(5)
    i += 1

在上述代码中,webdriver.Firefox 用于创建一个 Firefox 浏览器实例,并通过 get 方法访问 Google 图片搜索页面。通过 execute_script 方法模拟浏览器滚动页面,加载更多图片。find_element_by_xpath 方法用于查找并点击 “显示更多结果” 按钮,确保加载尽可能多的图片。time.sleep 方法用于在每次滚动后等待页面加载完成。

图片解析与下载

工具通过 BeautifulSoup 库解析网页内容,提取图片的 URL,并使用 urllib 库下载图片。以下是图片解析与下载的代码片段及解析:

from bs4 import BeautifulSoup
import urllib.request
import os

soup = BeautifulSoup(driver.page_source, "html.parser")
driver.close()

imgTags = soup.find_all("img", class_="rg_i")
count = 0
for i in imgTags:
    try:
        urllib.request.urlretrieve(i["src"], savePath + str(count) + ".jpg")
        count += 1
        print("Number of images downloaded = " + str(count), end="\r")
    except Exception:
        pass
print("Total images downloaded = " + str(count))

在上述代码中,BeautifulSoup 用于解析网页的 HTML 内容,find_all 方法用于查找所有图片标签。通过遍历图片标签,提取图片的 src 属性(图片 URL),并使用 urllib.request.urlretrieve 方法下载图片。下载的图片被保存到用户指定的目录中,文件名以下载顺序编号。通过 try-except 块处理可能发生的异常,确保下载过程的稳定性。

总结

本文介绍了一个基于 Python 的 Google 图片爬取工具,它通过结合 selenium 库的网页自动化功能、BeautifulSoup 库的网页解析功能和 urllib 库的图片下载功能,实现了从 Google 图片搜索结果中自动化下载图片的功能。该工具具有简单易用、功能实用的特点,适用于需要收集大量图片数据的各种场景。通过本文的介绍,读者可以了解到如何利用 Python 相关技术栈实现图片爬取工具的开发,为数据收集和机器学习项目提供了有益的参考。

源码获取

完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值