我正在使用Python的HTMLParser(本身不是必需的,但出于公司环境的考虑,它比外部库要好)从一个巨大的表中提取一个日期,该表来自一个开发糟糕的软件,如下所示:
(...)
<tr>
<td class='resultLabel'>
Scan Syntax
</td>
<td></td>
</tr>
<tr>
<td class='resultLabel'>Show Text</td>
<td></td>
</tr>
<tr>
<td class='resultLabel'>
Snapshot
</td>
<td>
05/05/15 11:25:16
<span class='clickCursorRegular' title='View Transcript' onClick="viewStatusTranscript('714294386-2303', '0FB88F01-CDA1-ECFA-597C-93CA57C71910')">
Succeeded
</span>
</td>
</tr>
<tr>
<td class='resultLabel'>Snapshot OS Image</td>
<td><span style='color:#636363;'>Not Supported</span></td>
</tr>
<tr>
<td class='resultLabel'>Telnet/SSH Session</td>
<td>
04/28/15 16:11:40
<span class='clickCursorRegular' title='View Transcript' onClick="viewStatusTranscript('714294386-2303', '814FE794-7982-2334-E69F-4D8EF9615011')">Failed</span>
</td>
</tr>
我的目标是获取与快照字段相对应的日期(在本例中为“05/05/15 11:25:16”),但是只有在快照成功的情况下才。(编辑:我的意思是无论哪种方式都可以得到日期,但也可以通过阅读“成功”部分来知道日期是否有效)
这可以从下面日期内的文本中提取。包含表没有id或类,但它是整个页面中唯一的表,行数可能会波动。FWIW,HTML是通过请求获得的。在
我一直在研究HTMLParser,但我不确定如何完成这个任务。。。尽管由于公司的规定,如果可能的话,我真的希望继续使用Python的内置库,但是可以随意推荐其他库。在
有不同的方法。我还没有找到一个真正让我满意的HTMLParser,但我还在找!以下是一些想法:
只需计算找到starttag
<td>
的次数,然后接受来自数据处理程序的数据稍微改进的版本:Count starttag
<td>
,它有一个属性class='resultLabel'
更好的方法是:搜索嵌套的
<td>
s如果要检测页面中的多个字段,可以实现
state machine
,以检测特定的标记序列。您还可以获取所有标记并构造一个树结构,这将允许您直接寻址
<td>
所在的分支。 这就是lxml所做的:只需一个步骤,它就可以解析HTML文档并将其转换为树结构,然后可以将其导航到包含所需的<td>
的分支。在主要问题是什么?很多很多网站都有不正确的页面。因此,它取决于解析器是否具有容错能力并接受某种陌生性。大多数浏览器都会悄悄地接受这种奇怪的现象,但是您可以通过浏览器的调试器进行检查,或者将url发送到w3c的验证服务。在
相关问题 更多 >
编程相关推荐