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

运行速卖通爬虫代码报json.decoder.JSONDecodeError错误如何解决

报错核心原因

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 本质是返回的响应内容不是合法JSON格式,通常是请求被速卖通反爬策略拦截,返回了错误页面、验证码页面或空响应导致的,你的代码存在3个明确问题:

  • Cookies全部过期:代码内的Cookies时间戳为2021年的旧数据,速卖通会话Cookies有效期通常不超过24小时,失效后请求会被直接拦截
  • Headers参数格式错误:复制请求时携带了多余的转义符^\^,导致sec-ch-ua、sec-ch-ua-platform等参数格式非法,被反爬识别为异常请求
  • 动态参数写死:pv_feature、_m_h5_tk等参数是每次搜索动态生成的,写死的旧参数无法通过服务端校验

修复步骤

  1. 打开浏览器访问速卖通对应搜索页面,按F12打开开发者工具,找到glosearch/api/product接口,复制最新的Cookies、pv_feature参数值替换代码内的旧内容
  2. 修正Headers参数的转义符,补全sec-ch-ua完整值
  3. 增加请求校验逻辑,避免直接调用json()方法抛出异常

修复后代码示例

import requests
import pandas as pd
import json

# 替换为你刚从浏览器接口中复制的最新Cookies
cookies = {
    # 此处替换为最新Cookies内容
}

# 修正格式错误后的Headers
headers = {
    'authority': 'www.aliexpress.com',
    'sec-ch-ua': '"Google Chrome";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
    'accept': 'application/json, text/plain, */*',
    'sec-ch-ua-mobile': '?0',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://www.aliexpress.com/premium/bags-for-kids-free-shipping.html?trafficChannel=ppc&d=y&CatId=0&SearchText=bags+for+kids+free+shipping&ltype=premium&SortType=default&page=2',
    'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8,pt;q=0.7',
}

# 替换为最新的pv_feature参数值
params = (
    ('trafficChannel', 'ppc'),
    ('d', 'y'),
    ('CatId', '0'),
    ('SearchText', 'bags for kids free shipping'),
    ('ltype', 'premium'),
    ('SortType', 'default'),
    ('page', '2'),
    ('origin', 'y'),
    ('pv_feature', '替换为浏览器中抓取的最新pv_feature值'),
)

res = []
r = requests.get('https://www.aliexpress.com/glosearch/api/product', headers=headers, params=params, cookies=cookies)

# 新增请求校验逻辑,避免直接报错
if r.status_code == 200:
    try:
        data = r.json()
        if "mods" in data and "itemList" in data["mods"]:
            for p in data["mods"]["itemList"]["content"]:
                res.append(p)
            df = pd.json_normalize(res)
            df.to_csv('kv.csv', encoding='utf-8-sig')
            print("数据导出成功")
        else:
            print("返回JSON结构异常,内容:", data)
    except json.JSONDecodeError as e:
        print("返回内容不是JSON,前500字符为:", r.text[:500])
else:
    print(f"请求失败,状态码:{r.status_code},响应内容:{r.text[:500]}")

注意事项

  • 请求间隔设置为3秒以上,避免高频请求触发IP封禁
  • 未登录状态下速卖通仅开放前3页搜索数据,超过3页需要登录后更新Cookies
  • 如果返回验证码页面,先在浏览器中完成验证码校验,再更新Cookies重新请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:39:04