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

BeautifulSoup提取img链接时find_all返回空列表问题排查

问题排查结论

你锁定的id="gallery-1"节点确实是页面存放图库内容的目标DOM区域,但当前代码无法拿到结果,核心问题有两个:

  • 你的属性匹配规则写死了完整class字符串:硬编码的class值中包含和文章ID绑定的galleryid-268780字段,实际请求返回的页面对应节点的class列表和你写的内容不完全一致,BeautifulSoup做属性完全匹配时找不到对应节点,因此返回空列表。
  • 就算匹配到容器节点,直接读取img标签的src属性也拿不到原图,页面默认加载的是低分辨率缩略图,原图地址存放在img的data-src属性、或是img外层a标签的href属性中。
修正代码

定位节点时优先用唯一固定的id属性,不要硬编码易变的拼接class值,参考实现如下:

import requests
from bs4 import BeautifulSoup

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36'}
r = requests.get('https://www.f1-fansite.com/f1-wallpaper/wallpaper-photos-2022-canadian-f1-grand-prix/', headers=headers)
soup = BeautifulSoup(r.content, 'lxml')

# 仅通过唯一id定位图库容器,跳过易变的class匹配
gallery = soup.find('div', id='gallery-1')
img_urls = []

if gallery:
    for img_tag in gallery.find_all('img'):
        # 优先读取懒加载属性里的原图地址,兜底取src
        url = img_tag.get('data-src', img_tag.get('src'))
        if url:
            img_urls.append(url)

print(img_urls)
补充说明

如果运行后拿到的地址仍然是带尺寸裁剪参数的缩略图,可以遍历每个img标签对应的父级a标签,取a标签的href属性值,该值为点击图片后跳转的无裁剪原图地址。
定位DOM节点时,尽量不要把动态生成、和页面/文章ID绑定的属性作为全匹配条件,优先选择id、固定功能类名这类不会随页面配置变动的属性做筛选,能大幅降低定位失效的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:15:53