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

使用BeautifulSoup爬取哥伦比亚选举结果网站失败的解决办法

问题原因

  1. 403错误是因为目标网站校验请求头的完整性,仅传User-Agent无法通过反爬校验。
  2. 无法抓取表格内容是因为该站点为React构建的单页应用,所有选举数据是页面加载后异步调用接口渲染的,你请求初始HTML返回的只有页面骨架,没有实际数据,且你用到的带哈希后缀的类名是CSS-in-JS自动生成的,本身就不适合作为定位元素的依据。

解决方案

不需要解析HTML,直接调用站点自身的后端数据接口即可拿到结构化的全量数据,比解析DOM效率高且稳定性强。

步骤1:补全请求头解决403

请求头需至少包含以下字段:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
    "Accept": "application/json, text/plain, */*",
    "Accept-Language": "es-CO,es;q=0.9,en;q=0.8",
    "Referer": "https://resultados.registraduria.gov.co/"
}

步骤2:直接请求数据接口

你需要的所有数据都在对应API接口返回的JSON结构中,对应你目标页面的接口地址为https://resultados.registraduria.gov.co/api/resultados/consejo/541/colombia/amazonas/leticia

完整示例代码

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
    "Accept": "application/json, text/plain, */*",
    "Accept-Language": "es-CO,es;q=0.9,en;q=0.8",
    "Referer": "https://resultados.registraduria.gov.co/"
}
# 直接调用数据接口,不需要请求原页面
url = "https://resultados.registraduria.gov.co/api/resultados/consejo/541/colombia/amazonas/leticia"

response = requests.get(url, headers=headers)
response.raise_for_status()
data = response.json()

# 提取顶部汇总数据
votos_validos = data['resumen']['votosValidos']
votos_en_blanco = data['resumen']['votosBlanco']
print(f"有效票:{votos_validos},空白票:{votos_en_blanco}")

# 提取表格中的各参选列表票数数据
for lista in data['listas']:
    print(f"参选列表:{lista['nombre']},得票数:{lista['votos']},得票占比:{lista['porcentaje']}%")

补充说明

如果需要爬其他区域的同类数据,只需要替换接口路径中对应的区域参数即可,不需要重新解析不同页面的DOM结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:01