Python+BeautifulSoup爬取类名重复嵌套div中的新冠统计数据
解决思路
你遇到的类名重复问题可以通过先定位唯一父容器,再在容器内查询子元素的方式解决。你提供的页面结构里,四类统计数据的外层容器都有独有的类名,分别是:
- 现存确诊:
active-case - 治愈出院:
iblock discharge - 死亡病例:
iblock death_case - 累计确诊:
iblock t_case
可直接运行的完整代码
import requests from bs4 import BeautifulSoup # 加User-Agent避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } URL = 'https://www.mygov.in/covid-19/' page = requests.get(URL, headers=headers) soup = BeautifulSoup(page.text, 'html.parser') # 提取累计确诊相关数据 total_block = soup.find('div', class_='iblock t_case') Total_cases = total_block.find('span', class_='icount').get_text(strip=True) Total_cases_in_last_24_hrs = total_block.find('div', class_='increase_block').get_text(strip=True) # 提取现存确诊相关数据 active_block = soup.find('div', class_='active-case') Active_cases = active_block.find('span', class_='icount').get_text(strip=True) Active_cases_change = active_block.find('div', class_='increase_block').get_text(strip=True) Active_cases_percent = active_block.find('span', class_='per_block').get_text(strip=True) # 提取治愈出院相关数据 discharge_block = soup.find('div', class_='iblock discharge') Discharged_total = discharge_block.find('span', class_='icount').get_text(strip=True) Discharged_in_last_24_hrs = discharge_block.find('div', class_='increase_block').get_text(strip=True) Discharged_percent = discharge_block.find('div', class_='per_block').get_text(strip=True) # 提取死亡病例相关数据 death_block = soup.find('div', class_='iblock death_case') Deaths_total = death_block.find('span', class_='icount').get_text(strip=True) Deaths_in_last_24_hrs = death_block.find('div', class_='increase_block').get_text(strip=True) Deaths_percent = death_block.find('div', class_='per_block').get_text(strip=True) # 测试打印结果 print(f"累计确诊:{Total_cases},24小时新增:{Total_cases_in_last_24_hrs}") print(f"现存确诊:{Active_cases},24小时变动:{Active_cases_change},占比{Active_cases_percent}") print(f"累计治愈:{Discharged_total},24小时新增:{Discharged_in_last_24_hrs},占比{Discharged_percent}") print(f"累计死亡:{Deaths_total},24小时新增:{Deaths_in_last_24_hrs},占比{Deaths_percent}")
原代码问题说明
- 查找父容器时
class_参数换行导致匹配失败,且额外加了不存在的attrs参数 - 没有在父容器内二次查找目标子元素,直接调用
get_text()会返回容器内所有文本,无法得到单独的数值
内容的提问来源于stack exchange,提问作者Yashinde
相关产品推荐
相关产品推荐

