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

Python爬取JSON接口报str must be integer错误排查

问题根因

抛出str must be integer类型错误的核心原因有2个:

  • 你存入productlinks列表的全是拼接好的字符串类型URL,全程没有对这些URL发起HTTP请求拿到响应数据,遍历时直接对字符串类型的link变量做['_embedded']键索引——Python中字符串仅支持整数下标做切片访问,传入字符串作为索引就会触发该报错。
  • 字段取值逻辑顺序完全错误:.json()是requests响应对象的解析方法,需要先拿到接口响应、解析为JSON字典之后才能逐层取键值,不是取完字段再调用json方法。

另外还有两个隐性问题会导致后续爬取失败:

  • 传给Algolia接口的data参数带了多余的HTML转义字符("这类),实际应该传原生JSON格式字符串,否则接口会返回参数错误。
  • Reedexpo的参展商详情接口不能直接复用Algolia搜索的请求头,需要调整accept、referer等字段,否则会被拦截返回403。
修正后可运行代码
import requests
import json

# 统一请求头,适配两个接口的校验规则
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'accept': 'application/json',
    'Referer': 'https://www.nationalhardwareshow.com/'
}

base_url = 'https://api.reedexpo.com/v1/organisations/'
# Algolia接口认证参数
algolia_params = {
    'x-algolia-agent': 'Algolia for vanilla JavaScript 3.27.1',
    'x-algolia-application-id': 'XD0U5M6Y4R',
    'x-algolia-api-key': 'd5cd7d4ec26134ff4a34d736a7f9ad47',
}
# 去掉多余转义的请求体,可自行修改page参数翻页
algolia_data = json.dumps({
    "params": "query=&page=0&facetFilters=&optionalFilters=[]"
})

# 1. 请求搜索接口获取参展商列表
search_resp = requests.post(
    'https://xd0u5m6y4r-3.algolianet.com/1/indexes/event-edition-eve-e6b1ae25-5b9f-457b-83b3-335667332366_en-us/query',
    params=algolia_params,
    headers=headers,
    data=algolia_data
).json()

productlinks = []
for item in search_resp['hits']:
    detail_url = f"{base_url}{item['organisationGuid']}/exhibiting-organisations?eventEditionId={item['eventEditionExternalId']}"
    productlinks.append(detail_url)

# 2. 遍历详情URL,提取公司名称
for link in productlinks:
    # 先发起请求,将响应解析为JSON字典
    detail_resp = requests.get(link, headers=headers).json()
    # _embedded字段是数组类型,取第一个元素才是展商信息
    company_name = detail_resp['_embedded'][0]['companyName']
    print(company_name)
注意事项
  • 上述代码默认只爬取第1页的参展商,如果要爬全量数据,循环修改algolia_data里的page参数即可,直到接口返回的hits为空就停止。
  • 如果请求频率过高被拦截,可以在每次请求后加1-2秒的延时,降低被封的概率。
  • 详情接口返回的展商信息字段很多,除了公司名称,还可以按需提取展位号、联系方式、公司介绍等字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:24:25