You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

爬取亚马逊印度笔记本页面时遇'NoneType'无'text'属性错误求解

亚马逊印度站笔记本爬取:解决AttributeError及正确提取价格、评分的方法

爬取亚马逊印度站笔记本搜索页时,出现了AttributeError: 'NoneType' object has no attribute 'text'错误。

我的代码:

headers = ({'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0',
       'Accept-Language' : 'en-US,en;q=0.5'})
lap_site = requests.get('https://www.amazon.in/s?k=laptops&sprefix=%2Caps%2C634&ref=nb_sb_ss_recent_3_0_recent',headers = headers)
lap_soup = bs(lap_site.content,'lxml')
content = lap_soup.find('div',class_ = 's-desktop-width-max s-desktop-content s-opposite-dir sg-row')
lap_detail_block = content.find_all('div',class_ = 'a-section a-spacing-small a-spacing-top-small')
lap_name = lap_price = lap_rating = []
for i in lap_detail_block:

   laptop_name = i.find('h2').a.span.text
   lap_name.append(laptop_name)

   laptop_rating = i.find('span',class_ = 'a-icon-alt').text
   lap_rating.append(laptop_rating)

   laptop_price = i.find('span',class_ = 'a-price-whole').text   
   lap_price.append(laptop_price)

laptop_details = {
'Laptop':lap_name,
'Price':lap_price,
'Rating':lap_rating }

print(laptop_details)

我猜测laptop_rating变量即使不加.text也会以字符串格式存储内容,可能因此导致NoneType错误,但这并非核心问题,想请教如何从该链接中正确提取价格和评分?


问题核心

错误根源是部分商品没有评分或价格元素,当find()找不到对应元素时返回None,直接调用.text就会触发报错。另外你依赖的页面类名可能已失效,导致定位不到正确的商品容器。

修复方案

  1. 增加空值判断:对每个查找结果做校验,避免直接调用.text
  2. 更换稳定选择器:用商品卡片的data-component-type属性定位,比类名更不容易变

修复后的代码:

import requests
from bs4 import BeautifulSoup as bs

headers = ({'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0',
       'Accept-Language' : 'en-US,en;q=0.5'})
lap_site = requests.get('https://www.amazon.in/s?k=laptops&sprefix=%2Caps%2C634&ref=nb_sb_ss_recent_3_0_recent', headers=headers)
lap_soup = bs(lap_site.content, 'lxml')

# 定位每个商品卡片,使用更稳定的属性选择器
lap_detail_block = lap_soup.find_all('div', {'data-component-type': 's-search-result'})

lap_name = []
lap_price = []
lap_rating = []

for item in lap_detail_block:
    # 提取商品名称,处理空值
    name_tag = item.find('h2', class_='a-size-mini a-spacing-none a-color-base s-line-clamp-2')
    laptop_name = name_tag.get_text(strip=True) if name_tag else '无名称'
    lap_name.append(laptop_name)

    # 提取评分,处理空值
    rating_tag = item.find('span', class_='a-icon-alt')
    laptop_rating = rating_tag.get_text(strip=True) if rating_tag else '无评分'
    lap_rating.append(laptop_rating)

    # 提取价格,处理空值
    price_tag = item.find('span', class_='a-price-whole')
    laptop_price = price_tag.get_text(strip=True) if price_tag else '无价格'
    lap_price.append(laptop_price)

laptop_details = {
    'Laptop': lap_name,
    'Price': lap_price,
    'Rating': lap_rating
}

# 格式化输出结果
for idx, name in enumerate(laptop_details['Laptop']):
    print(f"商品 {idx+1}")
    print(f"名称: {name}")
    print(f"价格: {laptop_details['Price'][idx]}")
    print(f"评分: {laptop_details['Rating'][idx]}")
    print("-" * 50)

额外提醒

  • 亚马逊反爬严格,建议添加请求间隔(如import time; time.sleep(2)),避免被封IP
  • 页面结构可能随时更新,定期检查选择器有效性
  • 使用get_text(strip=True)可自动去除文本中的多余空格和换行

内容的提问来源于stack exchange,提问作者SuryaTeja Masapogu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:45:42