You need to enable JavaScript to run this app. 基于Python的Image Scraper爬取Bing图片时未下载图片、退出码为0,如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

基于Python的Image Scraper爬取Bing图片时未下载图片、退出码为0,如何修复?

代码问题定位

  • 选择器完全失配:当前Bing图片搜索的DOM结构经过多轮迭代,原代码匹配的<a class="thumb">标签早已不存在,soup.findAll()返回的是空列表,后续循环逻辑完全不会执行。程序走完所有已定义的逻辑后自然退出,既不会报错,也不会产生任何下载动作。
  • 图片直链获取逻辑错误:即使匹配到对应a标签,其href属性存储的是Bing站内中转跳转链接,并非图片资源直链,直接请求会拿到目标网页的HTML内容,而非图片二进制流。
  • 本地存储逻辑缺失:代码直接向./scraped_images/路径写入文件,但没有提前判断、创建该目录,一旦抓取逻辑生效,保存阶段会触发目录不存在的报错。
  • 基础反爬规避缺失:请求未携带合法的浏览器User-Agent,会被Bing的反爬机制拦截,返回无有效搜索结果的拦截页面,即使修正选择器也拿不到真实图片列表。
  • 协议不匹配:原代码使用http协议请求Bing接口,当前Bing已强制全站跳转https,虽然requests会默认跟进跳转,但额外的重定向流程会增加被反爬拦截的概率。

对应修复方案

  • 替换为匹配Bing最新DOM结构的选择器:当前图片元信息存放在class="iusc"的a标签的m属性中,该属性为JSON格式字符串,解析后可直接获取真实图片直链、图片名称。
  • 请求时携带标准浏览器请求头,绕过基础反爬拦截。
  • 启动时自动创建本地存储目录,避免保存时报错。
  • 增加简单的异常捕获与超时设置,避免单张图片请求失败、或网络无响应导致整个程序崩溃。

修复后可运行的参考代码

from bs4 import BeautifulSoup
import requests
from PIL import Image
from io import BytesIO
import os
import json

# 配置本地存储目录,自动创建不存在的目录
SAVE_DIR = "./scraped_images"
os.makedirs(SAVE_DIR, exist_ok=True)

# 配置浏览器请求头,规避基础反爬
REQUEST_HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}

search = input("Search for: ")
request_params = {"q": search}
response = requests.get(
    "https://www.bing.com/images/search",
    params=request_params,
    headers=REQUEST_HEADERS
)

soup = BeautifulSoup(response.text, "html.parser")
# 匹配最新页面结构下的图片信息标签
img_info_tags = soup.findAll("a", {"class": "iusc"})

for tag in img_info_tags:
    try:
        # 解析JSON格式的图片元信息,获取真实图片直链
        img_metadata = json.loads(tag.attrs["m"])
        img_direct_url = img_metadata["murl"]
        # 从URL中提取安全的图片文件名
        img_file_name = img_direct_url.split("/")[-1].split("?")[0]
        # 请求图片资源,设置超时避免程序卡死
        img_response = requests.get(img_direct_url, headers=REQUEST_HEADERS, timeout=10)
        # 打开图片流并保存到本地
        img = Image.open(BytesIO(img_response.content))
        save_path = os.path.join(SAVE_DIR, img_file_name)
        img.save(save_path, img.format)
    except Exception:
        # 单张图片请求/解析失败直接跳过,不中断整体流程
        continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 20:06:05