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

Python中使用select方法爬取图片src的实现方案及提取失败问题排查

解决方案:修复图片爬取与KeyError问题

问题诊断

你的代码主要存在两个核心问题:

  • 空列表原因:页面图片采用懒加载机制,初始渲染时图片的class不是.lazyloaded(这个class是图片加载完成后才会加上的),而且你在循环中每次都从整个soup对象中选择图片,会导致重复收集或者根本取不到目标图片。
  • KeyError原因:直接通过img["src"]访问属性时,如果标签不存在该属性,就会抛出KeyError,应该使用更安全的属性获取方式。

修正后的代码

from base64 import decode 
import requests 
from bs4 import BeautifulSoup 
import pandas as pd 
import csv 
from time import sleep 
from random import randint 
import numpy as np 

headers = dict() 
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" 
images = [] 
titles = [] 
authors = [] 
pages = np.arange(1, 2, 1) 

for page in pages: 
    url = "https://www.dr.com.tr/kategori/Kitap/Cocuk-ve-Genclik/grupno=00884?Page=" + str(page) 
    results = requests.get(url, headers=headers) 
    soup = BeautifulSoup(results.text, "html.parser") 
    book_div = soup.find_all("div", class_="prd-main-wrapper") 
    sleep(randint(2, 10)) 
    
    for bookSection in book_div: 
        # 1. 从当前书籍区块内选择图片,而非整个页面
        # 2. 使用懒加载初始的class(根据实际页面调整,此处为常见的.lazy)
        # 3. 用get("src")安全获取属性,避免KeyError
        img_tag = bookSection.select_one(".lazy")
        img_src = img_tag.get("src") if img_tag else None
        images.append(img_src) 
        
        name = bookSection.find("a", class_="prd-name").get('title') 
        titles.append(name) 
        author = bookSection.find("div", class_="prd-row").text.strip() 
        authors.append(author) 

books = pd.DataFrame( 
    { 
        "Image": images, 
        "Book": titles, 
        "Author": authors, 
    } 
) 
books.to_csv("dr_child.csv", index=False, header=True,encoding = 'utf-8-sig')

关键修改点说明

  • 精准匹配图片:不再从整个页面抓取所有图片,而是聚焦当前书籍的区块bookSection,确保每本书对应自己的封面图,避免重复或错位。
  • 适配懒加载:将选择器从.lazyloaded改为.lazy(你可以通过浏览器F12查看初始HTML里的img类名,确认实际值),因为.lazyloaded是图片加载完成后才会添加的类,初始请求的HTML里不存在这个标识。
  • 避免KeyError:用img_tag.get("src")替代直接索引img["src"],如果标签不存在或没有src属性,会返回None而不是抛出异常,让代码更健壮。

额外小建议

  • 不确定图片类名时,打开目标页面按F12,在「Elements」标签下查看未加载完成前的img标签属性,不要看加载后的状态。
  • 可以给元素查找逻辑加上try-except,比如捕获AttributeError,避免页面结构小变动导致爬虫直接崩溃。

内容的提问来源于stack exchange,提问作者océane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:58:17