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

使用Python Requests爬取Inapi商标数据遇500错误求助

解决调用FindMarcas接口返回500错误的问题

问题原因

你调用的FindMarcas是ASP.NET WebForms的后端接口,这类接口依赖页面的状态参数(__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION)以及访问页面时生成的Cookie做验证。你之前的请求只传了numeroRegistro,缺少这些必要信息,导致服务器验证失败返回500错误。

修复后的代码

import requests
from bs4 import BeautifulSoup
import json

# 输入注册号
registro = input("Ingrese el número de registro: ")

# 第一步:先访问页面获取必要参数和Cookie
base_url = "https://ion.inapi.cl/Marca/BuscarMarca.aspx"
session = requests.Session()  # 使用Session保持Cookie
response = session.get(base_url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取ASP.NET状态参数
view_state = soup.find("input", id="__VIEWSTATE")["value"]
view_state_generator = soup.find("input", id="__VIEWSTATEGENERATOR")["value"]
event_validation = soup.find("input", id="__EVENTVALIDATION")["value"]

# 第二步:构造POST请求的参数和头
url = "https://ion.inapi.cl/Marca/BuscarMarca.aspx/FindMarcas"
headers = {
    "Content-Type": "application/json; charset=utf-8",
    "X-Requested-With": "XMLHttpRequest",  # 标记为AJAX请求
    "Referer": base_url  # 加上来源页,模拟浏览器行为
}

data = json.dumps({
    "numeroRegistro": registro,
    "__VIEWSTATE": view_state,
    "__VIEWSTATEGENERATOR": view_state_generator,
    "__EVENTVALIDATION": event_validation
})

# 发送请求
response = session.post(url, headers=headers, data=data)

# 处理响应
if response.status_code == 200:
    try:
        response_json = response.json()
        d_value = response_json['d']
        d_json = json.loads(d_value)
        marcas = d_json['Marcas']
        
        if len(marcas) > 0:
            marca = marcas[0]
            # 提取行政事项信息(Administrative Instances)
            admin_instances = marca.get('InstanciaAdministrativa', [])
            print(f"Registro {registro} 的行政事项信息:")
            for idx, instance in enumerate(admin_instances, 1):
                print(f"--- 事项 {idx} ---")
                print(f"类型: {instance.get('Tipo', 'N/A')}")
                print(f"日期: {instance.get('Fecha', 'N/A')}")
                print(f"描述: {instance.get('Descripcion', 'N/A')}")
                print(f"状态: {instance.get('Estado', 'N/A')}")
        else:
            print(f"未找到注册号 {registro} 的商标信息")
    except (KeyError, json.JSONDecodeError) as e:
        print(f"解析响应出错: {str(e)}")
else:
    print(f"请求失败,状态码: {response.status_code}")

关键说明

  • 使用requests.Session()保持会话,自动处理Cookie,确保请求携带页面访问时生成的会话Cookie。
  • 从页面HTML中提取ASP.NET必需的状态参数,这些参数是服务器验证请求合法性的关键。
  • 设置X-Requested-With和Referer头,模拟浏览器的AJAX请求行为,避免被服务器拦截。
  • 直接提取响应中的InstanciaAdministrativa字段,这就是你需要的「行政事项」信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:32:24