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

Python处理API无格式文本:提取Moviestarplanet2 Item ID并转JSON

解决思路与正确处理步骤

核心问题分析

你当前的代码误用了BeautifulSoup——这个接口返回的是纯JSON格式数据,完全没有HTML结构,所以用BeautifulSoup解析是多余的,反而会把原本清晰的JSON数据当成普通文本处理,导致后续解析困难。

正确处理流程(分步讲解)

  1. 直接解析API的JSON响应
    requests库内置了JSON解析方法,不需要额外的html_to_json或手动用json.loads处理文本。发送请求后,直接调用response.json()就能把返回的JSON字符串转换成Python可操作的字典/列表。

  2. 提取目标Item ID
    从解析后的字典中,通过键路径就能拿到Item ID:

    • 示例数据里,目标ID在item字段下的id键,即解析后的字典['item']['id'],对应示例中的912。
  3. 批量处理13000+ ID的思路

    • 先确定IDNum的范围(比如从1到13000+),用循环遍历每个ID;
    • 每次请求后添加短暂延迟(比如time.sleep(0.5)),避免请求频率过高触发API反爬限制;
    • 加入请求状态检查(比如判断response.status_code == 200),跳过无效ID对应的请求;
    • 用集合存储Item ID,自动去重(因为不同的listing可能对应同一个item)。

简化逻辑示例(仅展示思路,非复制即用代码)

import requests
import time

item_ids = set()

# 假设ID范围是1到13000
for id_num in range(1, 13001):
    url = f'https://us.mspapis.com/shopinventory/v1/shops/listings/{id_num}'
    try:
        response = requests.get(url)
        response.raise_for_status()  # 抛出请求错误的异常
        data = response.json()
        # 提取Item ID并加入集合
        item_id = data['item']['id']
        item_ids.add(item_id)
    except Exception as e:
        # 处理请求失败或数据解析错误的情况
        print(f"处理ID {id_num} 时出错: {e}")
    finally:
        # 控制请求频率
        time.sleep(0.5)

# 可以把结果保存到文件
with open('item_ids.txt', 'w') as f:
    for item_id in item_ids:
        f.write(f"{item_id}\n")

之前尝试的问题说明

  • html_to_json库完全不需要:这个库是用来把HTML转换成JSON的,但你的数据源本身就是JSON,用它反而会破坏数据结构;
  • 如果用内置json模块,应该用json.loads(page.text),但requests.get(url).json()是更简洁的方式,已经帮你完成了解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:59:52