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

为何我的网页爬虫仅抓取5张图片后就返回错误?

解决OLX.ro iPhone13列表页图片下载不全问题

问题原因

  1. OLX采用图片懒加载机制,大部分图片的真实地址不在src属性中,而是存储在data-src或data-lazy属性里,你当前仅读取src,只能获取到页面初始加载的少量图片(即成功下载的5张)。
  2. 直接使用urllib.request发起请求未携带浏览器请求头,容易被网站反爬机制拦截,导致请求失败。
  3. 异常处理过于宽泛,直接pass无法定位具体错误,不利于问题排查。

修改后的代码

import requests
from bs4 import BeautifulSoup
import os

# 创建图片保存目录
save_dir = "olx_iphone13_images"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

url = "https://www.olx.ro/d/oferte/q-iphone-13/"
# 模拟浏览器请求头,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 发送请求获取页面内容
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
page_soup = BeautifulSoup(response.text, 'html.parser')
# 定位包含图片的容器元素
image_containers = page_soup.find_all('div', class_="css-19ucd76")

i = 1
for container in image_containers:
    try:
        img_tag = container.find('img')
        # 优先读取懒加载的真实图片地址,无则回退到src
        img_src = img_tag.get('data-src') or img_tag.get('src')
        
        # 跳过无有效图片的情况
        if not img_src or '/app/static/media/no_thumbnail' in img_src:
            print(f"跳过无效图片容器 {i}")
            i += 1
            continue
        
        # 补全相对地址为完整URL
        if not img_src.startswith('http'):
            img_src = f"https://www.olx.ro{img_src}"
        
        print(f"正在下载: {img_src}")
        # 请求图片资源,携带请求头
        img_response = requests.get(img_src, headers=headers)
        img_response.raise_for_status()  # 主动抛出HTTP请求错误
        
        # 提取图片后缀名,处理带参数的URL
        file_ext = img_src.split('.')[-1].split('?')[0]
        file_name = os.path.join(save_dir, f"{i}.{file_ext}")
        
        # 保存图片
        with open(file_name, 'wb') as img_file:
            img_file.write(img_response.content)
        
        print(f"成功保存: {file_name}")
        i += 1
        
    except Exception as e:
        print(f"处理第{i}个容器出错: {str(e)}")
        i += 1
        continue

关键修改说明

  • 处理懒加载:通过data-src获取真实图片地址,这是解决大部分图片无法获取的核心。
  • 模拟浏览器请求:添加User-Agent请求头,规避网站反爬拦截。
  • URL补全与处理:自动补全相对地址为完整域名,兼容带参数的图片URL。
  • 优化异常处理:捕获并打印具体错误,便于排查问题;使用with语句自动管理文件,更安全。
  • 自动创建目录:提前创建保存文件夹,避免保存时因目录不存在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:36:22