📅  最后修改于: 2023-12-03 15:08:25.563000             🧑  作者: Mango
在这篇文章中,我们将介绍使用 Python 编写一个脚本来下载 Google 图片。该脚本将搜索给定的关键字,并下载相关结果中所有的图片。
在开始编写脚本之前,我们需要安装一些必要的 Python 库。这些库包括:
Selenium
: 用于启动和管理 Google Chrome 浏览器beautifulsoup4
: 用于解析 HTML 页面requests
: 用于发送 HTTP 请求可以使用 pip
命令来安装这些库,命令如下:
pip install selenium beautifulsoup4 requests
在我们开始搜索和下载图片之前,我们需要启动和管理 Google Chrome 浏览器。为此,我们需要一个 Chrome 驱动。Chrome 驱动程序是负责与 Chrome 浏览器交互的桥梁。
可以从 这个链接 下载 Chrome 驱动。请务必下载与你安装的 Chrome 版本匹配的驱动。
一旦下载了 Chrome 驱动程序,我们可以使用以下代码将其初始化。
from selenium import webdriver
driver = webdriver.Chrome('/path/to/chromedriver')
其中 path/to/chromedriver
是 Chrome 驱动程序的路径。请将其替换为你实际上下载的位置。
现在我们已经初始化了 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。
最后一步是将所有提取的图片 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 图片!