如何从邮件HTML片段中提取告警关联的用户名?
解决邮件告警HTML中提取source_username对应值的问题
问题原因
- Parsel代码问题:XPath表达式中误用了HTML实体
",应替换为单引号;同时原提取逻辑未精准定位到存储用户名的span标签,可能导致获取无关文本。 - BeautifulSoup代码问题:使用
string='source_username'无法匹配目标td标签,因为文本嵌套在子span节点中,且存在多余空白字符,无法完全精确匹配。
修正后的Parsel代码
from parsel import Selector sel = Selector(text=html) # 定位包含source_username的td标签 source_tag = sel.xpath('//td[contains(.//text(), "source_username")]')[0] # 提取相邻td中span的文本并去除空白 source_username = source_tag.xpath('./following-sibling::td[1]//span/text()').get().strip() print(source_username)
修正后的BeautifulSoup代码
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') # 先找到包含source_username的span,再定位其父td source_span = soup.find('span', string=lambda text: text and 'source_username' in text.strip()) if source_span: source_tag = source_span.find_parent('td') # 获取下一个兄弟td的文本并去除空白 source_username = source_tag.find_next_sibling('td').text.strip() print(source_username)
内容的提问来源于stack exchange,提问作者Bronson888
相关产品推荐
相关产品推荐

