You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium爬取谷歌图片时如何仅筛选爬取大尺寸HD高清图片

谷歌图片仅爬取高清大图的修改方案

核心实现逻辑

你原有代码抓取的是搜索结果网格里的缩略图,所以尺寸偏小。要获取高清图需要两步优化:一是提前用谷歌图片自带的尺寸筛选功能过滤小尺寸结果,二是点击缩略图加载右侧预览区的原图后再抓取,同时增加尺寸校验规则。

具体修改步骤

1. 增加谷歌图片大尺寸筛选操作

进入图片搜索结果页后,模拟点击筛选条件,直接让谷歌返回大尺寸结果,从源头过滤小图:

  • 点击搜索结果上方的「工具」按钮
  • 点击「大小」下拉选项
  • 选择「大」尺寸过滤结果

2. 调整图片抓取逻辑

不要直接截取网格里的缩略图,改为逐个点击缩略图,等右侧预览区的大图加载完成后再操作,同时校验图片实际像素,符合高清要求(比如≥1080P)再保存。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

# 初始化浏览器
driver = webdriver.Chrome('/Path_to_driver/chromedriver')
driver.get('https://www.google.co.in/')
driver.implicitly_wait(10) # 加隐式等待,避免元素未加载报错

# 搜索关键词
box = driver.find_element(By.XPATH, '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input')
box.send_keys('mobile phone camera')
box.send_keys(Keys.ENTER)

# 切换到图片搜索页
driver.find_element(By.XPATH, '//*[@id="hdtb-msb"]/div[1]/div/div[2]/a').click()
time.sleep(2)

# --------------- 新增:筛选大尺寸图片 ---------------
# 点击「工具」按钮
driver.find_element(By.XPATH, '//*[@id="yDmH0d"]/div[2]/c-wiz/div[1]/div/div[1]/div[2]/div[2]/div').click()
time.sleep(1)
# 点击「大小」下拉框
driver.find_element(By.XPATH, '//*[@id="yDmH0d"]/div[2]/c-wiz/div[2]/div[2]/c-wiz[1]/div/div/div[1]/div/div[1]/div/div[1]').click()
time.sleep(1)
# 选择「大」尺寸
driver.find_element(By.XPATH, '//*[@id="yDmH0d"]/div[2]/c-wiz/div[2]/div[2]/c-wiz[1]/div/div/div[3]/div/a[1]/div/span').click()
time.sleep(2)
# ---------------------------------------------------

# 滚动加载全部结果(原有逻辑保留)
last_height = driver.execute_script('return document.body.scrollHeight')
while True:
    driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    time.sleep(2)
    new_height = driver.execute_script('return document.body.scrollHeight')
    print(new_height)
    try:
        driver.find_element(By.XPATH, '//*[@id="islmp"]/div/div/div/div/div[5]/input').click()
        time.sleep(2)
    except:
        pass
    if new_height == last_height:
        break
    last_height = new_height

save_index = 1500
# 高清图最低像素要求,可自行调整(这里设置为宽≥1920 或 高≥1080)
MIN_WIDTH = 1920
MIN_HEIGHT = 1080

for i in range(1,50):
    try:
        # 点击缩略图加载右侧大图预览
        thumb_img = driver.find_element(By.XPATH, f'//*[@id="islrg"]/div[1]/div[{str(i)}]/a[1]/div[1]/img')
        thumb_img.click()
        time.sleep(2) # 等待大图加载完成
        # 取右侧预览区的大图元素
        hd_img = driver.find_element(By.XPATH, '//*[@id="Sva75c"]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[3]/div/a/img')
        # 获取图片实际原始像素(不是页面显示尺寸)
        real_width = hd_img.get_attribute('naturalWidth')
        real_height = hd_img.get_attribute('naturalHeight')
        # 转换为数字类型比较
        if int(real_width) >= MIN_WIDTH or int(real_height) >= MIN_HEIGHT:
            save_index +=1
            hd_img.screenshot(f'./images/({str(save_index)}).png')
            print(f"已保存高清图:{save_index}.png,尺寸{real_width}*{real_height}")
    except Exception as e:
        print(f"第{i}张图抓取失败:{e}")
        continue

# 最后关闭浏览器
driver.quit()

新手注意事项

  • 如果XPath定位失效,可以自己在浏览器开发者工具里重新获取对应元素的XPath替换即可,谷歌页面结构偶尔会更新
  • 可以根据自己的需求调整MIN_WIDTH和MIN_HEIGHT的数值,要求越高符合条件的图片越少
  • 注意爬取频率不要太快,避免被谷歌反爬拦截,可适当调大sleep的时间
  • 不要爬取有版权保护的图片用于商业用途

内容的提问来源于stack exchange,提问作者Utsav Uts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:06:02