使用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
相关产品推荐
相关产品推荐

