如何用简易方法解析包含HTML代码的字符串?
简易解析这段HTML表格行的方案
嘿,针对你给出的这种结构规整的HTML表格行(<tr>包含多个<td>),我给你两个超实用的简易解析方案,不用依赖重型框架,上手就能用:
方案一:用Python内置的html.parser(严谨可靠)
Python自带的HTML解析模块完全能搞定这个需求,它会正确处理HTML标签的嵌套和属性,比正则更稳妥。示例代码如下:
from html.parser import HTMLParser class TableRowParser(HTMLParser): def __init__(self): super().__init__() self.current_td = False self.td_contents = [] def handle_starttag(self, tag, attrs): # 当遇到<td>标签时,标记开始收集内容 if tag.lower() == 'td': self.current_td = True def handle_endtag(self, tag): # 当遇到</td>标签时,标记结束收集 if tag.lower() == 'td': self.current_td = False def handle_data(self, data): # 收集<td>里的文本内容,去掉首尾空白 if self.current_td: cleaned_data = data.strip() self.td_contents.append(cleaned_data if cleaned_data else None) # 你的HTML字符串(这里用你给出的示例) html_str = '''<TR ALIGN=RIGHT VALIGN=TOP> <TD ALIGN=CENTER>TN</TD> <TD></TD> <TD ALIGN=CENTER>W</TD> <TD ALIGN=LEFT>I-40</TD> <TD>1.7</TD> <TD>0:01</TD> <TD></TD> <TD ALIGN=LEFT>+I 40 I 440, TN</TD> <TD>560.8</TD> <TD>8:57</TD> <TD>1198.3</TD> <TD>19:36</TD> </TR>''' parser = TableRowParser() parser.feed(html_str) parser.close() # 输出每个<td>的内容 print("解析结果:") for idx, content in enumerate(parser.td_contents): print(f"第{idx+1}个TD内容:{content}")
这个方案的好处是完全原生,不需要额外安装依赖,而且能处理各种合法的HTML格式(比如标签大小写、多余空格),适合后续可能扩展的场景。
方案二:用正则表达式(快速简洁)
如果你的HTML结构完全固定(就像示例里这样,<td>没有嵌套其他标签),用正则会更快捷,一行核心代码就能提取所有<td>的内容:
import re html_str = '''<TR ALIGN=RIGHT VALIGN=TOP> <TD ALIGN=CENTER>TN</TD> <TD></TD> <TD ALIGN=CENTER>W</TD> <TD ALIGN=LEFT>I-40</TD> <TD>1.7</TD> <TD>0:01</TD> <TD></TD> <TD ALIGN=LEFT>+I 40 I 440, TN</TD> <TD>560.8</TD> <TD>8:57</TD> <TD>1198.3</TD> <TD>19:36</TD> </TR>''' # 匹配所有<td>标签里的内容,忽略标签属性 td_pattern = re.compile(r'<TD[^>]*>(.*?)</TD>', re.IGNORECASE) td_contents = [match.group(1).strip() or None for match in td_pattern.finditer(html_str)] # 输出结果 print("解析结果:") for idx, content in enumerate(td_contents): print(f"第{idx+1}个TD内容:{content}")
⚠️ 注意:正则处理HTML有局限性,如果后续<td>里出现嵌套标签(比如<td><span>文本</span></td>),正则就会失效。但对于你给出的这种简单场景,它足够高效。
内容的提问来源于stack exchange,提问作者compcobalt
相关产品推荐
相关产品推荐

