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

BeautifulSoup调用find方法报find() takes no keyword arguments错误如何解决

问题排查与修复方案

核心错误原因

  • 报错出现在product_name = product.find('a', class_='a-link-normal a-text-normal').text这一行:
    你执行product = soup.find('span', class_='a-offscreen').text时,末尾的.text已经将返回结果转为字符串类型,Python原生字符串的find()方法仅支持位置参数,不接受class_这类关键字参数,只有BeautifulSoup的Tag对象的find()方法才支持关键字参数查询。
  • 逻辑顺序错误:价格的<span>标签是商品卡片标签的子元素,不可能从价格标签中反向找到商品名称的<a>标签,查询逻辑完全颠倒。
  • 额外变量错误:打印语句中使用的变量名products和你前面定义的product不一致,运行会触发NameError。
  • 反爬适配问题:亚马逊默认拦截无请求头的爬虫请求,直接调用requests.get()大概率返回验证页面,无法获取目标商品数据。

修正后的可运行代码

from bs4 import BeautifulSoup
import requests

# 加请求头模拟浏览器访问,绕过基础反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
}

resp = requests.get('https://www.amazon.sg/s?k=monitor&ref=nb_sb_noss_2', headers=headers)
resp.encoding = 'utf-8'
soup = BeautifulSoup(resp.text, 'lxml')

# 先定位所有商品卡片标签
goods_cards = soup.find_all('div', {'data-component-type': 's-search-result'})
for card in goods_cards:
    # 从卡片内单独查询商品名
    name_tag = card.find('a', class_='a-link-normal a-text-normal')
    product_name = name_tag.text.strip() if name_tag else "无商品名"
    # 从卡片内单独查询价格
    price_tag = card.find('span', class_='a-offscreen')
    product_price = price_tag.text.strip() if price_tag else "无报价"
    
    print(f"价格: {product_price}")
    print(f"商品名: {product_name}\n")

注意事项

  • 亚马逊页面结构会不定期调整,如果后续定位不到元素,需要重新检查对应标签的类名是否变更。
  • 频繁请求会触发亚马逊的人机验证,建议添加合理的请求间隔。

内容的提问来源于stack exchange,提问作者ayden chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:48:04