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

抓取网页隐藏表格遇阻:Agenas新冠数据表格仅获表头、JSON接口返回401的解决方法咨询

解决动态表格抓取与HTTP Basic认证401问题

问题拆解

你碰到的两个关键问题其实很好理解:

  • 直接爬取页面源码只拿到表头,是因为表格的实际数据是前端通过JavaScript动态加载的——页面初始HTML里的<tbody id="tab2_body">本来就是空的,数据会在页面加载完成后通过AJAX请求从后端接口拉取填充。
  • 访问JSON接口返回401,是因为你没用到正确的HTTP Basic认证方式:把用户名密码塞请求头或者URL里的方法不对,requests有专门处理Basic Auth的参数,不用手动拼接。

解决方案

1. 正确处理Basic认证

对于需要账号密码验证的接口,requests提供了auth参数,直接传入包含用户名和密码的元组即可,不用自己折腾headers或者URL拼接。

2. 获取并填充动态表格数据

先拿到页面的表格结构(如果需要完整HTML格式的表格),再请求JSON接口拿到数据,最后把数据填充到空的tbody里即可。

完整代码示例

import requests
from bs4 import BeautifulSoup as bs

# 初始化会话,保持请求一致性
s = requests.Session()
s.headers.update({
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
})

# 1. 获取页面的空表格结构(可选,若只需数据可跳过这步)
page_url = 'https://www.agenas.gov.it/covid19/web/index.php?r=site%2Ftab2'
page_req = s.get(page_url)
soup = bs(page_req.content, 'html.parser')
table = soup.find('table')
tbody = table.find('tbody', id='tab2_body')

# 2. 请求JSON接口,用auth参数传入认证信息
json_url = 'https://www.agenas.gov.it/covid19/web/index.php?r=json%2Ftab2'
json_req = s.get(json_url, auth=('Agenas', 'tab2-19'))

# 处理返回数据
if json_req.status_code == 200:
    data = json_req.json()
    # 遍历数据生成表格行
    for item in data:
        tr = soup.new_tag('tr')
        # 按表头顺序添加单元格
        tr.append(soup.new_tag('td', string=item['regione']))
        tr.append(soup.new_tag('td', string=str(item['ricoverati_non_critici'])))
        tr.append(soup.new_tag('td', string=str(item['posti_letto_non_critici'])))
        tr.append(soup.new_tag('td', string=str(item['ricoverati_terapia_intensiva'])))
        tr.append(soup.new_tag('td', string=str(item['posti_letto_terapia_intensiva'])))
        tr.append(soup.new_tag('td', string=str(item['posti_letto_terapia_intensiva_attivabili'])))
        
        tbody.append(tr)
    
    # 现在table已经是完整带数据的表格了,可打印或保存
    print(table.prettify())
else:
    print(f"请求失败,状态码:{json_req.status_code}")

小提醒

  • 一定要设置正确的User-Agent,避免被服务器识别为爬虫拦截。
  • 如果后续接口返回的JSON字段有变化,先打印data查看最新结构,再调整单元格的生成逻辑。
  • 使用Session能保持请求之间的会话状态,不用重复设置headers和认证信息,更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:23:38