如何用LeetCode GraphQL查询提取数据并打印全量JSON(Python)
如何用Python获取LeetCode全量用户资料并学习GraphQL查询
一、打印全量用户资料JSON
要获取LeetCode用户的全量公开资料,可通过以下两种方式实现:
1. 用GraphQL自省查询自动生成全量查询
LeetCode的GraphQL接口支持自省查询,能直接获取UserPublicProfile类型的所有可查询字段,进而构建全量查询语句:
import requests import json LEETCODE_GRAPHQL_URL = "https://leetcode.com/graphql/" HEADERS = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 自省查询获取UserPublicProfile的所有字段名 introspection_query = """ query { __type(name: "UserPublicProfile") { fields { name } } } """ resp = requests.post(LEETCODE_GRAPHQL_URL, headers=HEADERS, json={"query": introspection_query}) field_names = [f["name"] for f in resp.json()["data"]["__type"]["fields"]] # 拼接全量查询语句 full_profile_query = f""" query userPublicProfile($username: String!) {{ userPublicProfile(username: $username) {{ {" ".join(field_names)} }} }} """ # 查询目标用户资料并打印全量JSON variables = {"username": "目标用户名"} resp = requests.post(LEETCODE_GRAPHQL_URL, headers=HEADERS, json={"query": full_profile_query, "variables": variables}) print(json.dumps(resp.json(), indent=2))
2. 直接复用官方请求(更快捷)
打开目标用户的LeetCode主页,按F12打开开发者工具,在Network标签筛选GraphQL请求,找到获取用户资料的请求,复制其query部分——官方查询已包含大部分常用字段,你可以直接复用并补充遗漏字段。
二、学习编写提取特定信息的GraphQL查询
1. 核心规则:按需取数
GraphQL的核心是只请求你需要的字段,不需要冗余内容。比如仅获取用户名、解题统计和排名:
query userPublicProfile($username: String!) { userPublicProfile(username: $username) { username solvedQuestions { total easy medium hard } ranking } }
在Python中,只需将上述查询替换之前的full_profile_query,即可得到精简后的结果,再解析JSON提取对应数据即可。
2. 学习方法
- 分析官方请求:通过浏览器开发者工具查看LeetCode自身发送的GraphQL请求,学习字段嵌套、变量使用的方式,这是最贴合场景的实践方法。
- 掌握基础语法:了解查询结构、嵌套字段、变量、别名等基础概念,结合自省查询得到的字段列表,快速定制符合需求的查询。
注意事项
- LeetCode的GraphQL接口有速率限制,避免短时间内频繁请求。
- 部分私密字段(如未公开的提交记录)需要携带登录后的Cookie才能获取,若需此类数据,需在请求头中添加对应Cookie信息。
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

