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

Python BeautifulSoup抓取新冠疫苗接种表格代码问题求助

问题排查与解决

已确认的2个核心问题

  • 反爬拦截:你没给请求加浏览器伪装头,requests默认的请求头会被站点识别为爬虫,所以你拿到的HTML根本不是目标站点的正常响应,从你贴的HTML片段的title就能看出来,返回的是其他站点的内容
  • 动态渲染问题:就算请求正常,你要的疫苗统计表格是页面加载完成后由JS异步拉取数据渲染生成的,静态HTTP请求拿到的初始HTML里没有任何表格数据,自然找不到<tr>元素

推荐解决方法

直接用Selenium模拟真实浏览器访问,自动等待JS渲染完成后再提取数据,适配动态页面的同时也能绕过基础反爬。

第一步:安装依赖

pip install selenium beautifulsoup4 webdriver-manager

第二步:修正后的代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 自动配置Chrome驱动,不需要手动下载
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://ourworldindata.org/covid-vaccinations")

# 显式等待表格加载完成,最多等10秒,比固定等待时间更高效
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "table"))
    )
    # 拿到渲染完成的完整HTML
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, "html.parser")
    
    # 定位表格,建议你自己打开浏览器F12审查你要的表格的class/id,替换下面的选择器,定位更精准
    target_table = soup.find("table")
    if target_table:
        rows = target_table.find_all("tr")
        for row in rows[1:]: # 跳过表头行
            cols = [col.text.strip() for col in row.find_all("td")]
            if len(cols) >=3:
                # 按你需要的列顺序取对应字段即可
                country = cols[0]
                fully_vaccinated = cols[1]
                partly_vaccinated = cols[2]
                print(country, fully_vaccinated, partly_vaccinated)
finally:
    # 自动关闭浏览器
    driver.quit()

注意事项

你可以用浏览器F12的元素选择器点击目标表格,复制对应的CSS选择器,替换代码中的target_table = soup.find("table")部分,就能精准定位到你要的那个表格,避免拿到页面其他无关表格的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:05