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

使用BeautifulSoup爬取Google图片时src标签请求异常如何解决?

问题排查结论

你遇到的问题是多个原因共同导致的,和谷歌图片的返回结构、请求配置都有关:

  • 谷歌图片搜索结果的首个<img>标签是谷歌官方logo的base64编码占位图,src属性以data:image/开头,不属于可发起HTTP请求的网络链接,直接传入requests.get()会触发异常
  • 请求图片资源时没有携带请求头,谷歌的静态资源服务会校验请求身份,无合法User-Agent的请求会被直接拦截返回403
  • 计数逻辑存在误差,tik <= NumberOfImages会导致最终下载的图片数量比你输入的指定数量多1张
  • 没有对输入的文件夹路径做校验,如果你输入的Google Drive路径不存在,写入文件时会直接抛出IO错误
修复后的代码
# 挂载Google Drive
from google.colab import drive
drive.mount('/content/gdrive')

import requests
import os
from bs4 import BeautifulSoup
import base64

# 定义搜索参数
query = input("Images of:") 
NumberOfImages = int(input("Number of images:"))
FolderLocation = input("Input Folder Location(示例:/content/gdrive/MyDrive/imgs):")
# 目标文件夹不存在则自动创建
os.makedirs(FolderLocation, exist_ok=True)

query= query.split()
query='+'.join(query)
url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

# 解析搜索页面
request = requests.get(url,headers=headers)
soup = BeautifulSoup(request.text,'html.parser')
images = soup.find_all('img')

tik = 0
for image in images:
  if tik < NumberOfImages:
    link = image.get('src', '')
    # 跳过无有效src的标签
    if not link:
      continue
    name = f"{query}_{tik}.jpg"
    print(link, name)
    save_path = os.path.join(FolderLocation, name)
    with open(save_path,'wb') as f:
      # 处理base64格式的占位图
      if link.startswith('data:image'):
        # 截取base64编码部分解码写入
        img_data = base64.b64decode(link.split(',')[1])
        f.write(img_data)
      else:
        # 请求网络图片时携带合法请求头
        im = requests.get(link, headers=headers)
        f.write(im.content)
      print(f"Writing {name} to file")
    tik +=1
  else:
    break
额外说明

如果需要下载高清原图,谷歌图片的原图地址默认不会存在于首次加载的img标签的src属性中,你需要额外解析页面的JSON数据块提取高清链接,上述修复后的代码已经可以实现基础的谷歌图片缩略图下载功能,符合入门阶段的学习需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:27:01