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

使用LxmlSoup解析页面遇TypeError:意外关键字参数求助

LxmlSoup find函数报错TypeError: some keyword arguments unexpected的解决方法

问题原因

你遇到的错误是因为LxmlSoup的find方法不支持BeautifulSoup风格的class_参数命名。LxmlSoup内部调用的findel方法只接受原生属性名(比如直接用class),或者通过attrs字典传递属性。

另外原代码还有一处错误:.text()是错误的调用方式,LxmlSoup元素的文本内容是.text属性,而非可调用方法。

修正方案

方案1:直接使用class作为参数

LxmlSoup允许直接将class作为参数传递给find/find_all方法:

# 修正find的参数
item_elem = item_soup.find('span', class='cmp-product-details-main__heading-title')
# 修正text的调用方式
item_name = item_elem.text

方案2:通过attrs字典传递属性

如果担心class作为关键字参数的潜在冲突,也可以用attrs字典统一传递属性:

item_elem = item_soup.find('span', attrs={'class': 'cmp-product-details-main__heading-title'})
item_name = item_elem.text

完整修正后的代码

import requests
from LxmlSoup import LxmlSoup

html = requests.get('https://www.mcdonalds.com/ua/uk-ua/eat/fullmenu.html').text
soup = LxmlSoup(html)
# 同时修正find_all的参数
urls = soup.find_all('a', class='cmp-category__item-link')
items = []

for url in urls:
    link = "https://www.mcdonalds.com" + url.get("href")
    item_html = requests.get(link).text
    item_soup = LxmlSoup(item_html)

    # 增加元素存在性判断,避免页面结构变化导致报错
    item_elem = item_soup.find('span', class='cmp-product-details-main__heading-title')
    if item_elem:
        item_name = item_elem.text
        items.append(item_name)
    else:
        print(f"未找到商品名称:{link}")

print(items)

额外说明

  • LxmlSoup的API设计和BeautifulSoup存在差异,不要直接照搬BeautifulSoup的参数写法
  • 建议增加元素存在性判断,避免目标页面结构更新后,因找不到元素抛出异常

内容的提问来源于stack exchange,提问作者Nikita Grynov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:16