如何使用Beautiful Soup获取第二个srcset属性值
问题
我正尝试使用Beautiful Soup获取第二个srcset属性值,对应的原始HTML代码如下:
<picture class="card-picture ratio ratio-4x3"> <source srcset="/shop/media/L004D000_picture.PNG?context=bWFzdGVyfGltYWdlc3wzMDE3NTN8aW1hZ2UvcG5nfGgwMS9oMjcvODg0ODIyMDYxODc4Mi9MMDA0RDAwMF9waWN0dXJlLlBOR3wyZjRiZWE1NDU2MWU1MjUzMzU5MjAwNGVlYmIzY2MwNGQzODExMDI3NjNkMDE3YjQ4NGMwNjFlMGVkNTU2OWIy&rmode=pad&width=640&rmode=pad&width=640&format=webp" type="image/webp"/> <source srcset="/shop/media/L004D000_picture.PNG?context=bWFzdGVyfGltYWdlc3wzMDE3NTN8aW1hZ2UvcG5nfGgwMS9oMjcvODg0ODIyMDYxODc4Mi9MMDA0RDAwMF9waWN0dXJlLlBOR3wyZjRiZWE1NDU2MWU1MjUzMzU5MjAwNGVlYmIzY2MwNGQzODExMDI3NjNkMDE3YjQ4NGMwNjFlMGVkNTU2OWIy&rmode=pad&width=640&rmode=pad&width=640" type="image/jpeg"/> <img alt="" class="card-img object-fit-contain is-contain" loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> </img> </picture>
我的代码如下:
for result in results: imgel = result.find("source", attrs = {'srcset' : True})['srcset']
该代码返回第一个srcset值,我想要获取第二个PNG格式的URL。
解决方法
方法1:通过find_all获取所有source标签后取第二个
find方法仅返回匹配到的第一个元素,改用find_all获取所有带srcset属性的source标签,再通过索引[1](索引从0开始)拿到第二个元素:
for result in results: sources = result.find_all("source", attrs={'srcset': True}) if len(sources) >= 2: imgel = sources[1]['srcset']
添加长度判断可避免因标签数量不足导致索引错误。
方法2:根据type属性精准定位目标source
观察HTML结构,第二个source的type属性为image/jpeg,直接通过该属性筛选,无需依赖标签顺序:
for result in results: imgel = result.find("source", attrs={'type': 'image/jpeg'})['srcset']
这种方式更稳定,即使后续HTML中source标签顺序变化,只要type属性不变就能正确获取目标值。
内容的提问来源于stack exchange,提问作者buzz
相关产品推荐
相关产品推荐

