如何使用Beautiful Soup遍历列表提取img标签的src属性数据
问题原因
find_all('img')返回的是静态结果集,你执行getimages[0].decompose()仅会将第一个元素从原HTML文档树中删除,不会将它从getimages列表里移除,所以列表中仍然保留已失效的<None>元素。- 你的异常捕获逻辑包裹了整个for循环,遍历到第一个无效元素时触发异常,会直接终止整个循环,走到全局异常分支输出
Image not found,后续的有效img元素根本没有机会被处理。
修复方案
方案1:直接跳过首元素遍历
如果你只是不需要处理第一个img元素,不需要从文档树删除它,直接从第二个元素开始遍历即可,同时将异常捕获放到循环内部,避免单个元素失效影响整体遍历:
getimages = getDetails.find_all('img') for x in getimages[1:]: try: print(x['src']) except (KeyError, TypeError): print("当前元素无有效src属性")
方案2:过滤所有无效元素后提取
如果需要兼容列表中任意位置的无效元素,可先做有效性校验再提取属性:
getimages = getDetails.find_all('img') # 若确实需要从原文档树删除第一个img元素,可保留这行,否则可以删除 getimages[0].decompose() for x in getimages: # 先校验元素是有效img标签且存在src属性 if x and x.name == 'img' and 'src' in x.attrs: print(x['src']) else: print("当前元素无有效src属性")
内容的提问来源于stack exchange,提问作者Sainita
相关产品推荐
相关产品推荐

