如何从BeautifulSoup find_all结果提取img的src?能否直接获取该URL?
如何提取img标签的src属性并直接获取图片URL?
嘿,我来帮你搞定这个问题!针对你的需求,分两种场景给你实用的解决方案:
一、从已有的find_all(id="contents")结果中提取img的src
首先要注意,soup.find_all(id="contents")返回的是元素列表(哪怕id是唯一的,它也会以列表形式返回),所以我们需要先拿到对应的div元素,再从中定位img标签:
url = 'http://www.xxx' html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, 'html.parser') # 用find更高效,因为id是唯一的,直接返回单个元素 contents_div = soup.find(id="contents") if contents_div: # 在div里找到img标签 img_tag = contents_div.find('img') if img_tag: # 获取src属性 img_src = img_tag.get('src') print(img_src) # 会输出:http://xxx/shop/data/editor/2020090302-01.jpg
如果一定要保留你原来的find_all写法,也可以这样处理列表:
s1 = soup.find_all(id="contents") if s1: img_tag = s1[0].find('img') if img_tag: print(img_tag.get('src'))
二、不通过id="contents",直接获取图片URL
既然你的核心需求只是拿到这张图片的URL,完全可以跳过contents这个中间层,直接定位img标签,这里给你几种精准的方式:
方式1:直接取页面中的第一个img标签
如果页面里只有这一张图片,或者目标图片是页面的第一个img,直接这样写:
img_tag = soup.find('img') # find默认返回第一个匹配的元素 if img_tag: print(img_tag.get('src'))
方式2:根据图片src的特征筛选
观察目标图片的src包含shop/data/editor/这个路径,可以用lambda表达式精准匹配:
target_img = soup.find('img', src=lambda x: x and 'shop/data/editor/' in x) if target_img: print(target_img.get('src'))
方式3:根据父元素的样式特征定位
从你给出的HTML结构看,img在一个style="text-align:center;"的td标签里,我们可以先定位这个td,再找img:
center_td = soup.find('td', style='text-align:center;') if center_td: img_tag = center_td.find('img') if img_tag: print(img_tag.get('src'))
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

