使用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
相关产品推荐
相关产品推荐

