Python中使用Beautiful Soup处理图片多属性名称的优化方案
优化图片链接提取方案
首先修正你获取图片标签的代码,原代码里的冒号应该改成逗号:
imgs = soup.find_all('img', {'class': 'slide-img'})
针对多属性提取的繁琐问题,你可以用属性优先级列表+循环遍历的方式替代重复的try-except,代码更简洁易维护:
优化后的代码示例
def get_img_url(img_tag): # 定义属性优先级,按顺序尝试 src_attrs = ['data-src', 'src', 'lazy-src'] for attr in src_attrs: img_url = img_tag.get(attr) if img_url: # 去掉?后面的参数部分,用split更安全(兼容没有?的情况) return img_url.split('?')[0] return '' # 遍历所有图片标签提取链接 for img in imgs: full_img_url = get_img_url(img) if full_img_url: print(full_img_url)
逻辑说明
- 把所有可能的图片属性按优先级放进列表,优先取
data-src,再是src,最后lazy-src - 用
img_tag.get(attr)替代直接索引,不存在的属性会返回None,不会抛出异常,省去try-except - 用
split('?')[0]处理链接,比find更稳妥:如果链接里没有?,split后第一个元素就是完整链接,不会出现切片错误
这样后续要加新的属性(比如data-lazy),只需要在src_attrs列表里加一项就行,不用写新的try块,代码扩展性更好。
内容的提问来源于stack exchange,提问作者user7596135
相关产品推荐
相关产品推荐

