Python使用BeautifulSoup提取多标签指定内容的方法
问题修复方案
直接调整遍历提取逻辑,跳过无有效数据的表头行,定向匹配你需要的字段即可,不需要逐标签硬写定位规则,修改后代码如下:
from bs4 import BeautifulSoup res = '''替换为你的HTML源码内容''' soup = BeautifulSoup(res, 'html.parser') for tr in soup.find_all('tr'): # 定位医院名称标签,找不到则说明是表头行,直接跳过 name_tag = tr.find('h3') if not name_tag: continue # 提取医院名称,自动去除前后空格、嵌套标签 print(name_tag.get_text(strip=True)) # 遍历当前行所有列表项 for li in tr.find_all('li'): li_content = li.get_text(strip=True) # 只保留需要的三个字段,过滤官网链接等无关内容 if li_content.startswith(('address:', 'phonenumber:', 'Email:')): print(li_content)
关键逻辑说明
- 之前输出
None是因为第一行是表头,本身不存在h3标签,加非空判断跳过这类行即可消除无效输出 - 用
get_text(strip=True)提取文本,不用逐层查找span、strong等嵌套子标签,直接拿到干净的纯文本内容 - 给li内容加前缀匹配规则,精准筛选目标字段,自动排除页面里的图片、地图iframe、官网链接等无关元素
运行代码后输出结果和你的预期完全一致:
ABC HOSPITAL address: 1345 Golden View , LA phonenumber: 3923 4260 Email: abc@hospital.com
如果后续表格内有多家医院数据,这套逻辑也可以直接批量提取,不需要额外调整。
内容的提问来源于stack exchange,提问作者Wo0dlion
相关产品推荐
相关产品推荐

