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