如何使用Selenium从Google图片网站爬取数据并下载图片?
使用Selenium从Google图片爬取并下载图片的实现方法
你现有的代码仅定位到了图片对应的标题链接元素,因此只能获取文本内容。要实现图片下载,需要先定位到图片标签获取资源链接,再通过网络请求将图片保存到本地,具体实现步骤如下:
前置依赖
需要先安装requests库用于发送图片下载请求:
pip install requests
具体实现逻辑
- 定位图片元素获取资源链接
Google图片采用懒加载机制,未出现在可视区域的图片真实链接会存储在data-src、data-srcurl这类自定义属性中,已加载的图片链接可以直接取src属性。 - 模拟滚动加载更多内容
Google图片默认只加载第一屏内容,需要模拟页面滚动触发加载逻辑,获取更多图片资源。 - 下载图片到本地
拿到图片链接后发送GET请求,将响应的二进制内容写入本地文件即可完成下载。
完整示例代码
import time import requests from selenium import webdriver from selenium.webdriver.common.by import By # 初始化浏览器 driver = webdriver.Chrome() driver.get("https://image.google.com/search?q=汽车") # 替换为你要搜索的关键词 time.sleep(2) # 模拟滚动加载,这里示例滚动3次,可以根据需要调整 scroll_times = 3 for _ in range(scroll_times): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 存储图片链接和对应名称 img_info = [] # 定位每张图片的卡片元素 card_list = driver.find_elements(By.XPATH, '//div[@class="isv-r PNCib MSM1fd BUooTd"]') for card in card_list: try: # 获取图片名称,就是你之前拿到的标题 name = card.find_element(By.XPATH, './/a[@class="VFACy kGQAp sMi44c lNHeqe WGvvNb"]').get_attribute('innerText') # 获取图片元素 img = card.find_element(By.TAG_NAME, 'img') # 优先取懒加载的真实链接,没有的话取src img_url = img.get_attribute('data-src') or img.get_attribute('src') if img_url and 'http' in img_url: img_info.append({"name": name, "url": img_url}) except Exception as e: continue # 下载图片到本地 save_path = "./imgs/" # 提前创建好这个文件夹 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} for index, info in enumerate(img_info): try: res = requests.get(info["url"], headers=headers, timeout=10) # 文件名处理,避免特殊字符导致保存失败 file_name = f"{save_path}{index}_{info['name'][:10]}.jpg" with open(file_name, 'wb') as f: f.write(res.content) print(f"已下载:{file_name}") except Exception as e: print(f"下载失败:{info['url']}, 错误信息:{e}") driver.quit()
注意事项
- Google图片的元素class属性是动态更新的,如果出现定位失效的情况,重新审查页面元素替换为最新的class值即可
- 下载请求需要携带User-Agent请求头,否则会出现403权限错误
- 不要高频大量爬取,避免IP被谷歌临时限制
- 保存文件时注意处理文件名的特殊字符,避免写入失败
内容的提问来源于stack exchange,提问作者bishwajit bhattacharya
相关产品推荐
相关产品推荐

