📜  如何使用Python下载 Google 图片(1)

📅  最后修改于: 2023-12-03 15:08:25.563000             🧑  作者: Mango

如何使用Python下载 Google 图片

在这篇文章中,我们将介绍使用 Python 编写一个脚本来下载 Google 图片。该脚本将搜索给定的关键字,并下载相关结果中所有的图片。

步骤 1: 安装必要的库

在开始编写脚本之前,我们需要安装一些必要的 Python 库。这些库包括:

  • Selenium: 用于启动和管理 Google Chrome 浏览器
  • beautifulsoup4: 用于解析 HTML 页面
  • requests: 用于发送 HTTP 请求

可以使用 pip 命令来安装这些库,命令如下:

pip install selenium beautifulsoup4 requests
步骤 2: 初始化 Chrome 驱动

在我们开始搜索和下载图片之前,我们需要启动和管理 Google Chrome 浏览器。为此,我们需要一个 Chrome 驱动。Chrome 驱动程序是负责与 Chrome 浏览器交互的桥梁。

可以从 这个链接 下载 Chrome 驱动。请务必下载与你安装的 Chrome 版本匹配的驱动。

一旦下载了 Chrome 驱动程序,我们可以使用以下代码将其初始化。

from selenium import webdriver

driver = webdriver.Chrome('/path/to/chromedriver')

其中 path/to/chromedriver 是 Chrome 驱动程序的路径。请将其替换为你实际上下载的位置。

步骤 3: 搜索并解析图片 URL

现在我们已经初始化了 Chrome 驱动程序,我们可以使用它来搜索关键字,并解析搜索结果中的图片 URL。

以下是搜索关键字并解析图片 URL 的代码:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from urllib.request import urlopen

def get_image_urls(search_term):
    driver.get(f"https://www.google.com/search?q={search_term}&source=lnms&tbm=isch")
    
    # 等待结果页面加载完全
    WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.TAG_NAME, 'img')))
    
    # 解析页面 HTML 并查找所有的图片元素
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    img_tags = soup.find_all('img', {'class': 'rg_i'})
    
    # 提取每个图像的 URL
    urls = [img['src'] for img in img_tags]
    
    # 关闭页面
    driver.quit()
    
    return urls

在这个函数中,我们首先打开一个 Google 图片搜索页。然后,我们等待页面的图像元素加载完全,然后使用 BeautifulSoup 解析页面 HTML。最后,我们查找所有带有类 rg_i 的图像元素,并提取它们的 URL。

步骤 4: 下载图片

最后一步是将所有提取的图片 URL 下载到本地目录中。以下是下载图片的 Python 代码。

import os
import requests

def download_images(image_urls, output_dir):
    
    # 创建目标目录(如果不存在)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 逐个下载图片并保存到目标目录
    for i, url in enumerate(image_urls):
        try:
            response = requests.get(url)
            file_path = os.path.join(output_dir, f"{i}.jpeg")
            with open(file_path, "wb") as f:
                f.write(response.content)
        except:
            print(f"Error downloading {url}")

在此函数中,我们首先检查给定的目录是否已存在。如果不存在,我们将其创建。然后,对于提取的每个图片 URL,我们下载它并将其保存到目标目录中。我们为每个图像命名为其在列表中的索引。

到此为止,我们已经完成了 Python 脚本的编写。以下是完整的脚本代码。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from urllib.request import urlopen
import os
import requests

def get_image_urls(search_term):
    driver = webdriver.Chrome('/path/to/chromedriver')
    
    driver.get(f"https://www.google.com/search?q={search_term}&source=lnms&tbm=isch")
    
    # 等待结果页面加载完全
    WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.TAG_NAME, 'img')))
    
    # 解析页面 HTML 并查找所有的图片元素
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    img_tags = soup.find_all('img', {'class': 'rg_i'})
    
    # 提取每个图像的 URL
    urls = [img['src'] for img in img_tags]
    
    # 关闭页面
    driver.quit()
    
    return urls

def download_images(image_urls, output_dir):
    
    # 创建目标目录(如果不存在)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 逐个下载图片并保存到目标目录
    for i, url in enumerate(image_urls):
        try:
            response = requests.get(url)
            file_path = os.path.join(output_dir, f"{i}.jpeg")
            with open(file_path, "wb") as f:
                f.write(response.content)
        except:
            print(f"Error downloading {url}")
            
if __name__ == "__main__":
    search_term = "apple"
    output_dir = "images"
    
    image_urls = get_image_urls(search_term)
    
    download_images(image_urls, output_dir)

注意,我们将搜索关键字和输出目录硬编码在代码中。你可以将它们改为你想要搜索的关键字和输出目录。启动脚本后,它将下载到目录中的所有相关图像。

希望这个教程能够帮助你使用 Python 下载 Google 图片!