Python处理API无格式文本:提取Moviestarplanet2 Item ID并转JSON
解决思路与正确处理步骤
核心问题分析
你当前的代码误用了BeautifulSoup——这个接口返回的是纯JSON格式数据,完全没有HTML结构,所以用BeautifulSoup解析是多余的,反而会把原本清晰的JSON数据当成普通文本处理,导致后续解析困难。
正确处理流程(分步讲解)
直接解析API的JSON响应
requests库内置了JSON解析方法,不需要额外的html_to_json或手动用json.loads处理文本。发送请求后,直接调用response.json()就能把返回的JSON字符串转换成Python可操作的字典/列表。提取目标Item ID
从解析后的字典中,通过键路径就能拿到Item ID:- 示例数据里,目标ID在
item字段下的id键,即解析后的字典['item']['id'],对应示例中的912。
- 示例数据里,目标ID在
批量处理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
相关产品推荐
相关产品推荐

