如何修复从Shopify站点抓取图片链接的AttributeError错误
解决Shopify图片链接抓取的AttributeError问题
错误原因
你遇到的AttributeError: 'NoneType' object has no attribute 'get',本质是代码中指定的图片容器class与实际HTML不匹配:页面里的图片class是lazyload grid__image-contain,但你代码里查找的是grid__image-contain lazyautosizes lazyloaded——这两组class是图片不同加载状态的标识(lazyload是未加载状态,lazyloaded是已加载状态),导致找不到目标元素返回None,调用.get()时触发报错。
修改Field_01的具体方案
1. 匹配核心class,忽略状态类
grid__image-contain是Shopify图片容器的固定核心class,不受加载状态影响,所以调整查找逻辑,只匹配这个核心class:
# 假设使用BeautifulSoup库 from bs4 import BeautifulSoup # 解析HTML内容 soup = BeautifulSoup(html_content, 'html.parser') # 查找包含核心class的首个图片容器 img_container = soup.select_one('.grid__image-contain')
2. 兼容懒加载的链接获取逻辑
Shopify图片懒加载时,真实链接存在data-src属性;加载完成后会转移到src属性,所以要同时处理两种情况,且增加容错判断:
field_01 = None if img_container: img_tag = img_container.find('img') if img_tag: # 优先取懒加载的真实链接,无则取src field_01 = img_tag.get('data-src') or img_tag.get('src')
3. 整体优化后的Field_01代码示例
# 整合后的完整逻辑 def extract_first_image(html_content): soup = BeautifulSoup(html_content, 'html.parser') img_container = soup.select_one('.grid__image-contain') if not img_container: return None img_tag = img_container.find('img') return img_tag.get('data-src') or img_tag.get('src') if img_tag else None # 调用示例(假设txt文件读取的内容存在html变量中) field_01 = extract_first_image(html)
关键注意点
- 必须增加多层判断(容器是否存在、img标签是否存在),避免
None调用方法的报错 - 同时处理
data-src和src,覆盖图片不同加载状态的情况
内容的提问来源于stack exchange,提问作者sammyb62
相关产品推荐
相关产品推荐

