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

使用BeautifulSoup爬取网站图片src仅返回2个结果如何解决

问题根因

  • 原生urllib.request发起请求时默认携带的User-Agent会被站点识别为爬虫,Imgur反爬策略会对这类请求返回仅包含统计追踪像素的极简初始页,和正常浏览器访问拿到的完整页面内容完全不同,这是仅拿到2个追踪链接的核心原因。
  • 目前主流站点普遍使用图片懒加载方案,图片真实地址不会直接写入src属性,而是暂存在data-src、data-original、data-lazy-src等自定义属性中,待页面滚动到对应位置时才会通过JS替换到src上,仅提取src属性会漏掉绝大多数图片。
  • 站点的瀑布流、动态推荐内容均由前端JS渲染生成,静态HTTP请求获取的原始HTML中不包含这部分DOM节点。

可运行修改代码

先安装依赖:
pip install beautifulsoup4 html5lib requests

对应代码:

from bs4 import BeautifulSoup
import requests

# 模拟正常浏览器请求头,绕过基础反爬校验
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# Imgur已强制HTTPS协议,HTTP请求会被跳转
html_page = requests.get("https://imgur.com", headers=headers).text
soup = BeautifulSoup(html_page, features="html5lib")
images = []
# 覆盖所有可能存储图片真实地址的标签属性
img_attrs = ["src", "data-src", "data-original", "data-lazy-src", "data-srcset"]

for img in soup.find_all("img"):
    for attr in img_attrs:
        img_url = img.get(attr)
        if img_url:
            # 补全相对路径地址
            if img_url.startswith("//"):
                img_url = "https:" + img_url
            elif img_url.startswith("/"):
                img_url = "https://imgur.com" + img_url
            # 过滤统计追踪类无效像素链接
            if any(track_domain in img_url for track_domain in ["facebook.com/tr", "scorecardresearch.com"]):
                continue
            images.append(img_url)
            break

# 结果去重
images = list(set(images))
print(images)

补充说明

上述静态爬取代码仅能提取首屏非懒加载的图片,如果需要获取全量页面图片,有两种可选方案:

  • 抓包分析站点的前端接口,直接调用返回图片列表的后端API,爬取效率最高
  • 使用Playwright、Selenium等可模拟浏览器执行JS的工具,等待页面渲染完成、懒加载资源触发后再提取DOM内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:48:11