首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python网络爬虫获取图片失败_Python爬虫之网页图片抓取的方法

python网络爬虫获取图片失败_Python爬虫之网页图片抓取的方法

原创
作者头像
用户3672714
发布2025-07-15 20:25:13
发布2025-07-15 20:25:13
6811
举报

你遇到的 “Python 网络爬虫获取图片失败” 的问题,在抓取网页图片时很常见,尤其是针对不同网站的结构、防爬机制、懒加载等问题。以下是常见失败原因+解决方案,并附上网页图片抓取的通用方法代码,帮助你从原理到实践一次搞定。


❗ 常见图片抓取失败原因及解决办法

❌ 失败原因

✅ 解决方法

img 标签使用 data-src 而非 src

获取 data-src 或 srcset

图片链接为相对路径

使用 urljoin 拼接为绝对路径

网站禁止爬虫或需登录

设置 User-Agent,或使用 cookies/session

图片动态加载(JS 渲染)

用 selenium 或查看 Network 抓包找到真实 URL

图片链接无后缀

伪造 .jpg 存储或使用 Content-Type 判断

图片被 CDN 防盗链保护

添加 Referer 请求头

下载图片被拒绝 (403, 404)

检查 headers、重试机制、是否是资源错误链接


✅ 通用网页图片抓取代码(含错误处理)

代码语言:javascript
复制
import osimport requestsfrom bs4 import BeautifulSoupfrom urllib.parse import urljoin# 网页 URL(请替换)url = 'https://example.com'# 本地保存文件夹folder = 'images'os.makedirs(folder, exist_ok=True)# 请求头headers = {    'User-Agent': 'Mozilla/5.0',    'Referer': url  # 有些网站要求加 Referer}# 请求页面res = requests.get(url, headers=headers, timeout=10)soup = BeautifulSoup(res.text, 'html.parser')# 获取所有 img 标签img_tags = soup.find_all('img')# 图片下载for i, img in enumerate(img_tags):    src = img.get('src') or img.get('data-src') or img.get('srcset')    if not src:        continue    # 拼接完整 URL    img_url = urljoin(url, src.split()[0])  # 去除 srcset 中多个地址    try:        # 请求图片内容        img_res = requests.get(img_url, headers=headers, timeout=10)        img_res.raise_for_status()        # 获取文件扩展名        ext = os.path.splitext(img_url)[1]        if not ext or len(ext) > 5:            ext = '.jpg'  # 默认扩展名        # 保存文件        file_path = os.path.join(folder, f'image_{i}{ext}')        with open(file_path, 'wb') as f:            f.write(img_res.content)        print(f'[✓] 下载成功:{img_url}')    except Exception as e:        print(f'[✗] 下载失败:{img_url},原因:{e}')php1.16 KB© 菜鸟-创作你的创作

🧪 故障排查技巧

  1. 打印调试信息:在代码中 print(img_url) 看是否为完整有效 URL。
  2. 用浏览器打开 img_url:手动验证图片是否可访问。
  3. 使用 Chrome 开发者工具 (F12):查看图片真实加载地址。
  4. 使用 response.status_code 判断错误类型:常见如 403、404、500。

🧠 进阶提示

  • 多线程下载:threading 或 concurrent.futures
  • 异步下载:aiohttp + asyncio
  • 动态网站抓图:使用 seleniumPlaywright
  • 批量抓图:抓分页 page=1,2,3...
  • https://www.52runoob.com/archives/3729

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ❗ 常见图片抓取失败原因及解决办法
  • ✅ 通用网页图片抓取代码(含错误处理)
  • 🧪 故障排查技巧
  • 🧠 进阶提示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档