Python BeautifulSoup提取图片报KeyError: 'data-lazy-src'的解决方法
问题解答
报错原因
soup.select('img.attachment-shop_single')共返回2个符合筛选条件的img节点:
- 第一个节点携带
data-lazy-src属性,所以第一次循环时可以正常取值并打印链接 - 第二个节点没有
data-lazy-src属性,直接用i['属性名']的方式取值时,BeautifulSoup就会抛出KeyError
解决方法
方案1:兼容所有匹配节点,自动取有效链接
使用BeautifulSoup的get()方法取值,属性不存在时不会抛出异常,可设置属性优先级,同时过滤占位的无效svg链接:
image = soup.select('img.attachment-shop_single') for i in image: # 优先取懒加载属性data-lazy-src,不存在则取src属性 img = i.get('data-lazy-src', i.get('src')) # 过滤占位用的svg伪链接,只保留有效图片链接 if img and 'data:image/svg' not in img: print(img)
方案2:直接提取第二个img的src链接
如果你确认需要第二个匹配节点的src属性,可直接通过下标取值:
image = soup.select('img.attachment-shop_single') # 列表下标从0开始,第二个元素对应下标1 if len(image) >= 2: target_img = image[1]['src'] print(target_img)
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

