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

使用BeautifulSoup爬取Rocket League交易站如何格式化交易数据?

解决方法

核心问题是直接提取了整块DOM的文本,没有拆分单个物品节点做结构化处理,才会出现大量空白、无法格式化的问题。可按照下方方案实现需求:

完整可运行代码

@bot.command()
async def rlgarage(ctx, arg):
    name = arg.strip()
    page = requests.get(f"https://rocket-league.com/player/{name}")
    # 检查页面请求状态
    if page.status_code != 200:
        await ctx.send("玩家不存在或站点访问失败")
        return
    soup = BeautifulSoup(page.content, 'html.parser')

    # 提取持有板块物品
    have_items = []
    have_block = soup.find(class_="rlg-trade__itemshas")
    if have_block:
        # 遍历所有单个物品节点
        for item in have_block.find_all(class_="rlg-trade__item"):
            # 提取属性并去除多余空白
            color = item.find(class_="rlg-trade__itemcolor").get_text().strip()
            item_name = item.find(class_="rlg-trade__itemname").get_text().strip()
            amount_ele = item.find(class_="rlg-trade__itemamount")
            # 数量不存在时默认赋值1
            amount = amount_ele.get_text().strip() if amount_ele else "1"
            # 按格式拼接
            if amount == "1":
                have_items.append(f"{color} {item_name}")
            else:
                have_items.append(f"{color} {item_name} ({amount})")
    
    # 提取求购板块物品,逻辑和持有板块完全一致
    want_items = []
    want_block = soup.find(class_="rlg-trade__itemswants")
    if want_block:
        for item in want_block.find_all(class_="rlg-trade__item"):
            color = item.find(class_="rlg-trade__itemcolor").get_text().strip()
            item_name = item.find(class_="rlg-trade__itemname").get_text().strip()
            amount_ele = item.find(class_="rlg-trade__itemamount")
            amount = amount_ele.get_text().strip() if amount_ele else "1"
            if amount == "1":
                want_items.append(f"{color} {item_name}")
            else:
                want_items.append(f"{color} {item_name} ({amount})")
    
    # 拼接最终输出文本
    output = "Has:\n\n" + "\n\n".join(have_items) + "\n\nWants:\n\n" + "\n\n".join(want_items)
    await ctx.send(output)

关键逻辑说明

  • 放弃直接提取整块文本的方案,先定位到单个物品的DOM节点rlg-trade__item再逐个提取属性,避免杂乱空白的干扰
  • 提取每个属性时用strip()方法自动去掉首尾的换行、空格等无效字符
  • 对数量节点做判空处理,不存在时默认赋值为1,匹配需求
  • 最后用join方法把所有物品按指定的换行格式拼接,输出即可完全符合预期格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:54:06