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

使用Python和BeautifulSoup抓取政府网站表格遇问题求助

魁北克INSPQ COVID-19时间线表格抓取修正方案

环境准备(Colab执行)

先安装所需依赖库:

!pip install requests beautifulsoup4 pandas
# 若页面为JS动态加载,额外执行以下命令
# !pip install selenium
# !apt-get update
# !apt-get install chromium-chromedriver

完整可运行代码

静态页面抓取(优先尝试)

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 目标页面URL
url = "https://www.inspq.qc.ca/covid-19/chronologie"

# 获取页面并解析
response = requests.get(url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')

# 定位时间线表格(基于页面当前class定位,若页面更新需调整)
table = soup.find('table', class_='tableau-chronologie')

# 提取表格数据
data = []
for row in table.find_all('tr')[1:]:  # 跳过表头行
    cols = row.find_all('td')
    if len(cols) >= 3:
        date = cols[0].get_text(strip=True)
        event_type = cols[1].get_text(strip=True)
        measure = cols[2].get_text('\n', strip=True)  # 保留措施内的换行结构
        data.append([date, event_type, measure])

# 转换为DataFrame并导出CSV
df = pd.DataFrame(data, columns=['日期', '事件类型', '采取的措施'])
df.to_csv('魁北克COVID19时间线.csv', index=False, encoding='utf-8-sig')

# 预览数据
print(df.head())

动态页面兼容方案(若静态抓取失败)

如果页面通过JavaScript渲染表格,使用Selenium获取完整页面内容:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd

url = "https://www.inspq.qc.ca/covid-19/chronologie"

# Colab Chrome无头模式配置
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver', options=options)

driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()

# 后续数据提取、导出步骤与静态方案完全一致
table = soup.find('table', class_='tableau-chronologie')
data = []
for row in table.find_all('tr')[1:]:
    cols = row.find_all('td')
    if len(cols) >= 3:
        date = cols[0].get_text(strip=True)
        event_type = cols[1].get_text(strip=True)
        measure = cols[2].get_text('\n', strip=True)
        data.append([date, event_type, measure])

df = pd.DataFrame(data, columns=['日期', '事件类型', '采取的措施'])
df.to_csv('魁北克COVID19时间线.csv', index=False, encoding='utf-8-sig')
print(df.head())

关键注意事项

  • 表格定位调整:若INSPQ页面更新了表格的class/id,右键检查页面元素,找到表格的正确标识,替换代码中find('table', class_='tableau-chronologie')的参数。
  • 编码处理:导出CSV时使用utf-8-sig编码,避免Excel打开出现乱码。
  • Colab文件查看:导出的CSV文件可在Colab左侧"文件"面板中找到,点击即可下载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:45:13