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

使用Twitter GraphQL API爬取数据出现重复结果的问题排查

Twitter GraphQL API爬虫重复数据(cursor未更新)排查方案
  • 确认cursor提取路径的准确性
    Twitter GraphQL响应中,分页cursor一般嵌套在data.search_timeline.timeline.instructions下的addEntries.entries列表里,需定位到entryId包含cursor-bottom的条目,提取其content.value值。检查你代码中解析JSON的路径是否正确,避免因路径错误提取到固定默认值或无效值。

  • 验证cursor是否被正确更新到请求参数
    首次请求的variables通常不含cursor字段,第一次请求成功后,必须将提取到的新cursor赋值给variables["cursor"],确保下一次请求使用更新后的参数。示例代码:

    # 初始请求参数
    variables = {"rawQuery": "你的搜索关键词", "count": 20}
    # 首次请求后提取cursor
    resp_json = response.json()
    # 遍历entries找cursor-bottom项
    for entry in resp_json["data"]["search_timeline"]["timeline"]["instructions"][0]["addEntries"]["entries"]:
        if "cursor-bottom" in entry["entryId"]:
            new_cursor = entry["content"]["value"]
            break
    # 更新variables
    variables["cursor"] = new_cursor
    # 下一次请求使用更新后的variables
    

    排查是否在循环中复用了初始的variables字典,或者更新cursor时未修改实际用于请求的变量。

  • 检查请求参数的编码方式
    务必使用requests.get的params参数传递variables和features,让requests自动处理URL编码,避免手动拼接URL导致cursor中的特殊字符未转义,服务器无法识别分页参数而返回重复数据:

    import json
    import requests
    
    url = "https://twitter.com/i/api/graphql/xxx/SearchTimeline"
    headers = {"Authorization": "Bearer YOUR_TOKEN", ...}
    features = {"your_features": ...}
    
    params = {
        "variables": json.dumps(variables),
        "features": json.dumps(features)
    }
    response = requests.get(url, params=params, headers=headers)
    
  • 排查响应中的错误信息
    每次请求后解析响应JSON,检查是否存在errors字段。若cursor无效、权限不足或接口限制,服务器可能不返回HTTP错误,而是直接返回第一页数据。示例检查代码:

    resp_json = response.json()
    if "errors" in resp_json:
        print("请求异常:", resp_json["errors"])
        break
    
  • 确认循环逻辑的执行顺序
    确保循环遵循「发起请求→提取cursor→更新variables→下一次请求」的顺序,避免出现先更新cursor(使用旧值)再请求的错误逻辑,导致每次都用相同的cursor获取重复数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:18