如何使用BeautifulSoup排除内部标签及特定<label>标签?
解决BeautifulSoup提取
嘿,我懂你这种卡住的感觉——刚开始用BeautifulSoup处理这种嵌套标签的文本提取,确实容易摸不着头脑。咱们一步步来解决这个需求:你要把每个
from bs4 import BeautifulSoup # 你的HTML内容 html = """ <dl class=""> <div> <ol> <li><label>Tournament Name</label>TCG Saturday</li> <li><label id="tournament_id" data-tournament-id="000002">Tournament ID</label>000002</li> <li><label>Category</label>TCG: Unlimited</li> <li><label>Registration</label>Sample Registration Content</li> </ol> </div> </dl> """ soup = BeautifulSoup(html, 'html.parser') # 遍历所有<li>元素 for li in soup.find_all('li'): # 找到当前<li>里的<label>标签 label_tag = li.find('label') if label_tag: # 移除<label>标签 label_tag.decompose() # 提取并清理文本(strip=True去掉多余空格) target_text = li.get_text(strip=True) print(target_text)
运行后输出:
TCG Saturday 000002 TCG: Unlimited Sample Registration Content
方法二:直接获取的兄弟文本
如果你不想修改DOM结构,也可以直接定位到
from bs4 import BeautifulSoup html = """ <dl class=""> <div> <ol> <li><label>Tournament Name</label>TCG Saturday</li> <li><label id="tournament_id" data-tournament-id="000002">Tournament ID</label>000002</li> <li><label>Category</label>TCG: Unlimited</li> <li><label>Registration</label>Sample Registration Content</li> </ol> </div> </dl> """ soup = BeautifulSoup(html, 'html.parser') for li in soup.find_all('li'): label_tag = li.find('label') if label_tag: # 获取<label>后面的兄弟文本,清理空格 target_text = label_tag.next_sibling.strip() print(target_text)
这个方法的输出和上面完全一样,而且不会改动原有的DOM结构,适合只需要提取文本的场景。
两种方法都能完美处理你给出的HTML结构,甚至能兼容部分
if label_tag判断会跳过那些没有内容的提问来源于stack exchange,提问作者voltnor
相关产品推荐
相关产品推荐

