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

使用Python结合BeautifulSoup与PIL获取指定URL图片路径及尺寸的报错修正

代码修正方案

原扩展代码直接触发报错的原因有3处,对应修正逻辑如下:

  • 请求参数类型错误:代码中requests.get(img)传入的是完整的img标签对象,并非实际的图片URL字符串,请求环节就会触发类型不匹配报错,需要传入img标签的src属性字符串值作为请求目标。
  • 路径解析错误:多数网站的图片src是相对站点根目录的路径,直接请求会触发404状态码,需要通过URL拼接工具将相对路径转换为和主站匹配的绝对访问路径。
  • 二进制流兼容性不足:直接读取请求返回的.raw属性时,部分站点会返回压缩格式的流内容,PIL无法直接解析,需要补充流解码配置,同时增加异常捕获避免单个无效图片链接中断整个程序。

修正后可运行的完整代码

from requests_html import HTMLSession
from bs4 import BeautifulSoup
from PIL import Image
from urllib.parse import urljoin
import requests

target_url = "https://www.example.com/"

# 初始化会话保持请求一致性,降低被站点反爬拦截的概率
session = HTMLSession()
page_response = session.get(target_url)
soup = BeautifulSoup(page_response.text, "lxml")
img_tag_list = soup.find_all("img")

for img in img_tag_list:
    if not img.has_attr("src"):
        continue
    # 自动拼接图片绝对路径,兼容相对路径场景
    img_full_url = urljoin(target_url, img["src"])
    try:
        # 流式请求图片,不直接拉取全量文件内容,降低内存占用
        img_resp = requests.get(img_full_url, stream=True, timeout=10)
        # 开启流解码,兼容带gzip压缩的图片返回
        img_resp.raw.decode_content = True
        with Image.open(img_resp.raw) as img_handler:
            print(f"图片路径:{img_full_url},图片尺寸:{img_handler.size[0]} × {img_handler.size[1]}")
        # 主动关闭响应连接,避免资源泄漏
        img_resp.close()
    except Exception as err:
        print(f"无法读取图片 {img_full_url} 的尺寸,错误信息:{str(err)}")

补充适配说明

  • 如果运行时提示缺少lxml依赖,可以将BeautifulSoup的解析参数替换为"html.parser",无需额外安装第三方解析库。
  • 如果遇到站点403拦截,可以在请求方法中补充浏览器格式的User-Agent请求头,模拟正常用户的访问特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 21:06:04