如何用BeautifulSoup优先抓取main标签内图片,无则抓取排除头尾的全部图片
基于BeautifulSoup的图片链接抓取方案修正
原代码存在的问题
- 未通过
soup对象调用find方法,直接写find('main')会触发报错 - 用单个变量
grabbedImages存储结果,循环结束后仅保留最后一个图片链接,无法收集全部目标数据 - 分支逻辑未实现“排除header和footer标签内图片”的核心需求
修正后的完整代码
# 初始化列表存储抓取到的图片链接 grabbed_images = [] # 查找页面中的main标签 main_tag = soup.find('main') if main_tag: # 抓取main标签内所有img的src属性 for img in main_tag.find_all('img'): src = img.get('src') # 过滤空的src属性,避免无效数据 if src: grabbed_images.append(src) else: # 抓取页面中所有img标签,排除header和footer内的图片 for img in soup.find_all('img'): # 检查当前img是否在header或footer标签的后代节点中 if not img.find_parents(['header', 'footer']): src = img.get('src') if src: grabbed_images.append(src)
关键逻辑说明
- 使用列表存储结果,避免单个变量覆盖数据
- 用
img.find_parents(['header', 'footer'])判断图片位置:返回空列表则说明该图片不在header或footer标签范围内 - 增加空
src过滤,避免收集到无效的空链接
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

