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

如何使用Python requests获取Kickstarter项目列表的JSON数据?

解决Kickstarter技术分类项目JSON数据爬取问题

问题分析

你当前的代码存在几个关键问题,导致无法正确获取JSON数据:

  • 函数参数与内部URL定义冲突,且分页参数page={}未传入具体值
  • 未定义json_str变量,导致写入文件时出错
  • 请求头可能缺少必要字段,服务器未返回JSON格式响应

修正方案

1. 完善请求头

Kickstarter的API需要明确指定接受JSON格式,需在headers中添加Accept: application/json,同时补充User-Agent模拟浏览器请求,避免被识别为爬虫。

2. 修正代码逻辑

  • 修复URL参数传递,确保分页参数正确替换
  • 定义正确的变量用于写入文件,或直接写入响应的JSON文本
  • 处理分页请求(可选,如需多页数据)

修正后的代码

import requests
import json

# 完善请求头,替换成你浏览器的User-Agent
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'application/json',
    'Referer': 'https://www.kickstarter.com/discover/categories/technology'
}

# 若需要cookies可保留,部分场景下无需也能请求成功
cookies = {}

def get_data(page_num):
    # 格式化URL,传入当前页码
    url = 'https://www.kickstarter.com/discover/advanced?google_chrome_workaround&category_id=7&woe_id=0&sort=magic&seed=2806592&page={}'.format(page_num)
    response = requests.get(url=url, headers=headers, cookies=cookies)
    
    # 检查响应是否为JSON格式
    if response.status_code == 200 and 'application/json' in response.headers.get('Content-Type', ''):
        data = response.json()
        # 将数据写入文件,按页码命名避免覆盖
        with open(f'data_page_{page_num}.json', 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)
        print(f"第{page_num}页数据已保存")
    else:
        print(f"请求失败,状态码:{response.status_code},响应内容类型:{response.headers.get('Content-Type')}")

if __name__ == "__main__":
    # 爬取第1页数据,如需多页可循环调用
    get_data(1)
    # 示例:爬取前3页
    # for page in range(1, 4):
    #     get_data(page)

关键说明

  • 请求头的重要性:Accept字段告诉服务器你期望JSON响应,User-Agent和Referer模拟正常浏览器访问,降低被拦截概率
  • 分页处理:通过修改page参数可以获取不同页码的项目数据
  • 响应校验:添加状态码和内容类型检查,方便排查请求失败原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:45:11